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' },
…
});
我想在查询 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' },
…
});