(SSR) Как получить типы фрагментов для IntrospectionFragmentMatcher на сервере? - PullRequest
0 голосов
/ 04 февраля 2019

Можно ли получить fragTypes напрямую из схемы?

Документы для IntrospectionFragmentMatcher показывают, как их извлекать и сохранять в файле JSON - но, похоже, учитывается только клиентсо стороны и предполагает, что у вас есть работающий сервер.

Поскольку я использую тот же сервер, что и мой API-интерфейс GraphQL, а также для рендеринга приложения, это что-то вроде курицы и яйца.Я все еще мог бы сделать это, как говорят в документации, с дополнительным шагом сборки, но это по сути означало бы:

  1. Сборка из src
  2. Запуск сервера
  3. Запуск сценариячтобы извлечь типы фрагментов, запишите их в .json файл
  4. Перезагрузите сервер

Мне кажется, что для этого должен быть более простой способ.

При рендеринге приложения я создаю новый клиент Apollo с SchemaLink, поэтому у меня уже есть полностью подготовленная схема.

Сейчас у меня есть это:

import introspectionQueryResultData from './fragmentTypes.json'

const fragmentMatcher = new IntrospectionFragmentMatcher({
    introspectionQueryResultData,
})


const render = ({ schema, context }) => async (req, res, next) => {
    const client = new ApolloClient({
        ssrMode: true,
        link: new SchemaLink({ schema, context }),
        cache: new InMemoryCache({
            fragmentMatcher,
        }),
    })
    // ...

Iвместо этого хотелось бы иметь возможность что-то вроде этого:

const render = ({ schema, context }) => async (req, res, next) => {
    const client = new ApolloClient({
        ssrMode: true,
        link: new SchemaLink({ schema, context }),
        cache: new InMemoryCache({
            fragmentMatcher: fragmentMatcherFromSchema(schema)
        }),
    })
    // ...

Возможно ли это?

1 Ответ

0 голосов
/ 29 мая 2019

Скорее всего, это возможно, но я еще не пытался сделать это полностью во время выполнения.Однако вам не нужно запускать сервер для извлечения фрагментов.

Если вы используете GraphQL-Code-Generator (https://graphql -code-generator.com / docs / getting-started / ).

Вы можете указать различные входные данные для схемы, кроме URL-адреса, где работает сервер, см. https://graphql -code-generator.com / docs / getting-Запущено / поле схемы # доступные форматы

Вы можете по крайней мере сократить количество шагов до

  1. Сборка из src
  2. Запуск сценария для извлечения типов фрагментовзапишите их в файл .json
  3. Запустите сервер
...