• ReactJS, Server Side rendering и некоторые тонкости обработки метатегов страницы
    0
    Добрый день, ставил цель если кто-то по каким-то причинам стал сам писать с нуля SSR для себя, а так можно попытаться пользоваться любым фреймворком, например NextJS и похожее.
    По поводу фейсбука, вероятно они используют GraphQL как источник получения данных и там есть целая платформа в виде Apollo
    Apollo имеет свой механизм извлечения данных и заодно облеченный механизм рендеринга дерева для извлечения метатегов (но тут надо обратить внимание, что рендерит он только первый уровень (слой) дерева и никие другие вложенные компоненты не будут включены). Вот как раз код для этого случая приведен тут:
    // ....
    import { getDataFromTree } from 'react-apollo';
    
    const helmetContext = {};
    
    const app = (
      <HelmetProvider context={helmetContext}>
        <App/>
      </HelmetProvider>
    );
    
    await getDataFromTree(app);
    
    const [header, footer] = template({
      helmet: helmetContext.helmet,
    });
    
    res.status(200);
    res.write(header);
    renderToNodeStream(app)
      .pipe(
        through(
          function write(data) {
            this.queue(data);
          },
          function end() {
            this.queue(footer);
            this.queue(null);
          }
        )
      )
      .pipe(res);

    Т.е. внутри этого метода getDataFromTree происходит и частичный рендеринг дерева ну и плюс заодно можно поизвлекать теги их Helmet.