Relay.js 是否支持具有多个会话的同构服务器端渲染?

Does Relay.js support isomorphic server-side rendering with multiple sessions?

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

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

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

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

This is the GitHub issue 您正在寻找,目前在制作 Relay "contextual" 的大部分方面已经取得了很大进展。有关详细信息,请参阅该问题。

自版本 0.6 isomorphic-relayisomorphic-material-relay-starter-kit 在后台使用)支持每个 HTTP 请求网络层,允许将会话数据传递到 GraphQL 服务器。重要的是它为每个请求使用隔离的中继存储,因此没有用户可以看到另一个用户的私人数据。

用法示例:

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);
});