apollo客户端-我可以在apollo客户端实例化之后动态调整apolloLinks吗?

时间:2018-12-20 16:06:53

标签: apollo apollo-client apollo-link

在实例化的apollo-client实例中如何在运行时更新令牌?

const middleware = new ApolloLink((operation, forward) => {
    operation.setContext({
        headers: new HttpHeaders().set('Authorization', 'Bearer ' + token || null)});
        return forward(operation);
    });


apollo.createNamed(id, {
    link: from([logoutLink, middleware, http]),
    cache: new InMemoryCache(),
});

apollo实例具有link属性,该属性本身是具有concat方法的ApolloLink实例。

apollo.getclient().link.concat()

但是调用该concat会返回一个新的ApolloLink实例。有没有办法使用此新的ApolloLink更新客户端实例?

1 个答案:

答案 0 :(得分:1)

您不需要创建新的ApolloLink -您可以将一个函数传递给ApolloLink的构造函数,该构造函数在每次发出请求时都会运行,因此只需处理该函数内部的逻辑即可:

const middleware = new ApolloLink((operation, forward) => {
  const headers = new HttpHeaders()
  const token = getTokenFromWherever()
  headers.set('Authorization', 'Bearer ' + token)
  operation.setContext({ header })
})