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.