我的服务器端是 rails,我使用 react-rails 和服务器端渲染(prerender:true)。最近开始使用带有 react-router-relay 的中继,但这样一来,服务器端渲染不再可能,因为显然获取数据涉及与涉及超时等的 graphql 服务器通信,这些在服务器渲染时不可用。所以我想肯定有办法将数据预先注入到服务器端的中继存储中,以避免调用graphql。我找到了这个库:https ://github.com/denvned/isomorphic-relay-router ,但我不能使用它,因为它与 react-rails 的使用不兼容(例如,我在任何地方都没有 app.get我的应用程序,所以没有地方可以使用那里提到的匹配功能)。关于如何使这项工作的任何想法?
1 回答
我们遇到了类似的问题。看看我们如何让它与 Rails 一起工作的实现。虽然我不建议这样做...
看看这个:https ://github.com/brandfolder/rails-graphql-relay
更新:
我们遇到了一些与 ruby 的阻塞特性有关的问题。为了解决这个问题,我们不得不拼凑出一个解决方案,将节点作为我们应用程序的一部分。
我们所做的是构建 3 个应用程序:
1) 一个符合 JSONAPI 的公共 API,封装了我们所有的业务逻辑。https://api.brandfolder.com/v2/docs建立在https://github.com/brandfolder/jsonapionify
2) 一个与我们的 JSON API 对话的 GraphQL 服务器。注意:我强烈推荐 express-graphql(节点)。由于 node 的异步/非阻塞特性,express-graphql 能够一次对我们的 API 进行多次调用,而不是在 ruby 中阻塞。 https://github.com/brandfolder/graphqlify
3) 为我们的 React/Relay 应用程序服务的应用程序。这只是一个带有 browserify 的资产管道,用于提供我们的反应代码。这还包含使用 ReactDOMServer 处理我们的服务器端渲染的代码。[私人仓库]
这可能是一个比您正在寻找的更复杂的示例,但这允许用于运行高度可用的高性能生产应用程序。在您的情况下,您可以轻松地拥有 2 个应用程序,GraphQL 服务器和前端代码。这将允许前端编译,而不必担心后端阻塞 Ruby 中的 GraphQL 服务器。