是否可以有一个 Apollo 服务器,为同一个应用程序服务 React 客户端?

Posted

技术标签:

【中文标题】是否可以有一个 Apollo 服务器,为同一个应用程序服务 React 客户端?【英文标题】:Is it possible to have an Apollo server, serve the React client for the same app? 【发布时间】:2020-09-24 07:05:03 【问题描述】:

我是服务器上的 Apollo 和 JS 的新手,但对 React、GraphQL 等并不陌生。我正在尝试用一种干净的方式让服务器使用 Apollo 为 API 提供服务,但是还有客户端,它将使用 ReactJS 和 Apollo 构建。

我阅读了有关 Apollo 的服务器端渲染的文章。将来我可能对此感兴趣,但现在,我只对从单个服务器部署的单个项目感兴趣,而不是两个。

是否可以干净地做到这一点?有没有规范的方法呢?它可以使用 create-react-app 还是不可能?

【问题讨论】:

【参考方案1】:

如果您不进行服务器端渲染,而只想像使用 CRA 构建的那样提供单页应用程序 (SPA),则可以使用几乎任何 HTTP 框架,甚至不使用任何 HTTP 框架来实现。 CRA 只是为您构建了一些静态内容,您可以使用例如 Express 来提供这些内容(请参阅文档 here)。但是,使用 nginx 或 Apache 来提供此内容(至少在生产中)通常是 better。如果您想使用 Express 或其他 HTTP 框架来提供文件,您可以为 Apollo Server 使用适当的 integration。如果您使用的是 Nginx,那么您可以坚持使用独立库,前提是您不想在 HTTP 服务器上公开任何额外的路由。

在开发过程中,您不希望在进行更改时不断手动重建您的 React 应用程序,因此 CRA 实际上为您运行了一个服务器来为应用程序提供服务并启用热重载。因为这是一个独立于 API 服务器的服务器,所以您通常需要启用 proxying your requests to the API。

【讨论】:

老实说,我不太清楚如何安排 CRA 的输出在静态文件上或在部署到 Heroku 时表达(以及如何处理环境配置)情况下,当我无法使用 mars/create-react-app 时)。【参考方案2】:

有可能,apollo 的设置与任何服务器相同,例如,您可以使用express to serve static files 并通过一些小的更改来实现 apollo,请参阅apollo server express 的文档并实现您熟悉的那个

【讨论】:

以上是关于是否可以有一个 Apollo 服务器,为同一个应用程序服务 React 客户端?的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL + Apollo 请求

是否可以将 Apollo GraphQL 响应映射为单一类型?

Apollo federation 可以 2 个服务为相同的方法返回不同的模型

Apollo 客户端和在线/离线事件

是否可以在 Apollo Client 中用新 id 更新或替换缓存条目的 id?

apollo 客户端是不是支持事务?