1

当我对 GraphQL 服务器进行查询时,我想读取 http 响应标头中设置的信息。

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

有没有办法获取响应标头?

4

2 回答 2

2

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

于 2021-02-19T12:51:02.267 回答
1

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

长答案是,如果您用fetchExchange自定义实现替换,您可以提取您想要的任何信息。不幸的是,这显然是自定义的,并且有一些工作,但另一方面,urql它允许您深入了解它的内部并将这种行为换掉。

于 2020-05-19T23:57:43.127 回答