Relay.js поддерживает изоморфный рендеринг на стороне сервера с несколькими сессиями?
В прошлый раз, когда я проверял, Relay.js не поддерживал основанный на сеансе NetworkLayer (одновременно мог использоваться только один NetworkLayer).
Таким образом, queue-hack ( https://github.com/codefoundries/isomorphic-material-relay-starter-kit/blob/master/webapp/renderOnServer.js#L66) был необходим для поддержки нескольких сеансов. Его нельзя использовать в производстве, поскольку каждый рендер полностью блокирует другой рендеринг (включая выборку данных).
Каков текущий статус по этому вопросу? Где я могу следить за прогрессом (проблемы GitHub) и, возможно, помочь?
3 ответа
Это проблема GitHub, которую вы ищете, и на этом этапе достигнут большой прогресс в том, чтобы сделать большую часть Relay "контекстной". Смотрите эту проблему для более подробной информации.
Начиная с версии 0.6 isomorphic-relay
(который isomorphic-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);
});
Похоже, проблема в relay.JS, что означает, что вы должны начать с их страницы GitHub, если хотите помочь.