Relay.js是否支持多个会话的同构服务器端呈现?

时间:2016-03-28 22:14:52

标签: graphql relayjs isomorphic-javascript isomorphic-relay

我上次检查时,Relay.js不支持基于会话的NetworkLayer(只能同时使用一个NetworkLayer)。

因此,需要queue-hack(https://github.com/codefoundries/isomorphic-material-relay-starter-kit/blob/master/webapp/renderOnServer.js#L66)来支持多个会话。它不能在生产中使用,因为每个渲染都完全阻止了另一个渲染(包括数据提取)。

这个问题的当前状态是什么? 我在哪里可以跟踪进度(github问题)并可能提供帮助?

3 个答案:

答案 0 :(得分:2)

This is the GitHub issue你正在寻找,并且在这一点上已经取得了很大进展,使大部分接力都成为“情境”。有关更多详细信息,请参阅该问题。

答案 1 :(得分:1)

由于版本0.6 isomorphic-relayisomorphic-material-relay-starter-kit在引擎盖下使用)支持每个HTTP请求网络层,允许将会话数据传递到GraphQL服务器。重要的是它为每个请求使用隔离的Relay存储,因此没有用户可以看到其他用户的私人数据。

使用示例:

app.get('/', (req, res, next) => {
  // Pass the user cookies on to the GraphQL server:
  const networkLayer = new Relay.DefaultNetworkLayer(
    'http://localhost:8080/graphql',
    { headers: { cookie: req.headers.cookie } },
  );

  // Pass the network layer to IsomorphicRelay.prepareData:
  IsomorphicRelay.prepareData(rootContainerProps, networkLayer).then({ data, props } => {
    const reactOutput = ReactDOMServer.renderToString(
      <IsomorphicRelay.Renderer {...props} />
    );

    res.render('index.ejs', {
      preloadedData: JSON.stringify(data),
      reactOutput
    });
  }).catch(next);
});

答案 2 :(得分:0)

听起来问题在于relay.JS,这意味着如果你想提供帮助,你应该从他们的GitHub页面开始。