使用react-router-relay和react-rails进行服务器端渲染

时间:2016-01-07 07:32:19

标签: react-router relay isomorphic-javascript react-rails react-router-relay

我的服务器端是rails,我正在使用react-rails和服务器端渲染(prerender:true)。最近开始使用带有react-routers-relay的中继,但是由此,服务器端呈现不再可能,因为显然获取数据涉及与graphql服务器通信,这涉及超时等,这在服务器呈现时是不可用的。 所以我想必须有一种方法将数据预先注入服务器端的中继存储,以避免调用graphql。 我找到了这个库:https://github.com/denvned/isomorphic-relay-router,但我不能使用它,因为它与react-rails的使用不兼容(例如我的应用程序中没有app.get,所以没有地方可以使用它那里提到的匹配功能)。关于如何使这项工作的任何想法?

1 个答案:

答案 0 :(得分:4)

我们遇到了类似的问题。请参阅我们如何使用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服务器。