Поддерживает ли Relay.js изоморфный рендеринг на стороне сервера с несколькими сеансами?

В прошлый раз, когда я проверял, Relay.js не поддерживал NetworkLayer на основе сеанса (одновременно можно было использовать только один NetworkLayer).

Таким образом, взлом очереди (https://github.com/codefoundries/isomorphic-material-relay-starter-kit/blob/master/webapp/renderOnServer.js#L66) требовалось для поддержки нескольких сеансов. Его нельзя использовать в продакшене, так как каждый рендер полностью блокирует другой рендер (включая выборку данных).

Каков текущий статус по этому вопросу? Где я могу следить за прогрессом (проблемы с github) и, возможно, помочь?


person Joon    schedule 28.03.2016    source источник


Ответы (3)


Это проблема GitHub, которую вы ищете, и был достигнут значительный прогресс в решении большая часть Relay «контекстна» на данный момент. Подробнее см. в этом выпуске.

person wincent    schedule 29.03.2016

Начиная с версии 0.6 isomorphic-relay (который isomorphic-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);
});
person dened    schedule 23.09.2016

Похоже, проблема в relay.JS, что означает, что вы должны начать с их страницы GitHub, если хотите помочь.

person Richard Barker    schedule 28.03.2016