从10月8日至10日加入我们在纽约市的聚会,了解最新的GraphQL联邦和API平台工程技巧、趋势和新闻。加入2024年纽约市GraphQL峰会
文档
免费开始

上下文链路

轻松地为您的操作设置上下文,这将被链下的其他链路使用。


概览

setContext函数接受一个函数,该函数返回一个对象或一个promise,该promise然后返回一个对象来设置请求的新上下文。是正在执行 请求,以及之前的上下文。此链路简化了异步查找如身份验证令牌等的操作。

import { setContext } from "@apollo/client/link/context";
const setAuthorizationLink = setContext((request, previousContext) => ({
headers: {authorization: "1234"}
}));
const asyncAuthLink = setContext(
request =>
new Promise((success, fail) => {
// do some async lookup here
setTimeout(() => {
success({ token: "async found token" });
}, 10);
})
);

缓存查找

通常,异步操作可能成本较高,并且不需要在每个请求中都调用它,尤其是在大量请求同时发生时。您可以在链路之外设置自己的缓存和失效,使其更快但仍然灵活。

例如,找到用户身份验证令牌,然后缓存,并在401响应中删除。

import { setContext } from "@apollo/client/link/context";
import { onError } from "@apollo/client/link/error";
// cached storage for the user token
let token;
const withToken = setContext(() => {
// if you have a cached value, return it immediately
if (token) return { token };
return AsyncTokenLookup().then(userToken => {
token = userToken;
return { token };
});
});
const resetToken = onError(({ networkError }) => {
if (
networkError &&
networkError.name ==='ServerError' &&
networkError.statusCode === 401
) {
// remove cached token on 401 from the server
token = null;
}
});
const authFlowLink = withToken.concat(resetToken);
上一页
HTTP 批处理
下一页
错误
评分文章评分在GitHub上编辑在GitHub上编辑论坛Discord

©2024Apollo Graph Inc.,商业名为Apollo GraphQL。

隐私政策

公司