URQL - GraphQL, как получить заголовки ответов

Я хотел бы прочитать информацию, указанную в заголовке ответа http, когда я делаю запрос на сервер GraphQL.

Когда я выполняю запрос с помощью клиента urql, я получаю только следующую информацию:

/** Resulting data from an [operation]{@link Operation}. */
export interface OperationResult<Data = any> {
    /** The [operation]{@link Operation} which has been executed. */
    operation: Operation;
    /** The data returned from the Graphql server. */
    data?: Data;
    /** Any errors resulting from the operation. */
    error?: CombinedError;
    /** Optional extensions return by the Graphql server. */
    extensions?: Record<string, any>;
    /** Optional stale flag added by exchanges that return stale results. */
    stale?: boolean;
}

Есть ли способ получить заголовки ответов?

3 ответа

Решение

Короткий ответ - нет, urqlв своем поведении по умолчанию не отображает заголовки ответа запроса, как можно увидеть здесь: https://github.com/FormidableLabs/urql/blob/master/packages/core/src/internal/fetchSource.ts Его просто проглатывают.

Длинный ответ: если вы замените fetchExchangeс помощью специальной реализации вы можете извлекать любую информацию, которую хотите. К сожалению, это явно обычай и некоторая работа, но, с другой стороны,urql позволяет вам проникнуть в его внутренности и поменять это поведение.

Вы можете использовать оболочку в предоставленном клиенте (если он глобален для вашего приложения) или в конкретном клиенте в компоненте с fetch такой вариант:

        const client = createClient({
    url: `https://example.org/graphql`,
    fetch: (...args) =>
      fetch(...args).then((response) => {
        const myHeader = response.headers.get('my-header');
        if (myHeader) {
          /* do stuff */
        }

        return response;
      }),
    fetchOptions: { credentials: 'include' },
    …
  });

Вы должны использовать такой контекст

createUser: async (parent, args, context, info) => {
console.log(context.req.headers);
}

Кстати, сначала вы должны вернуть его в свой index.js со своего сервера. Например с сервера apollo.

Другие вопросы по тегам