URQL - GraphQL 如何获得响应 headers

URQL - GraphQL how can I get response headers

我想在查询 GraphQL 服务器时读取 http 响应 header 中设置的信息。

当我使用 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;
}

有没有办法得到响应 headers ?

简短的回答是,不,urql 在其默认行为中不会公开请求的响应 headers,如下所示:https://github.com/FormidableLabs/urql/blob/master/packages/core/src/internal/fetchSource.ts#L23-L29 简直被吞了。

完整的答案是,如果您将 fetchExchange 替换为自定义实现,您可以提取所需的任何信息。不幸的是,这显然是习惯和一些工作,但另一方面,urql 允许您深入其内部并将此行为换掉。

您可以在提供的客户端中使用 fetch 包装器(如果它对您的应用程序是全局的)或在具有 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' },
    …
  });