更新Apollo客户端实例的uri

时间:2018-06-30 07:17:33

标签: javascript angular graphql apollo

我正在为我们的项目之一使用Angular Apollo。我正在将apollo客户端创建为:

Array
(
    [cart] => Array
        (
            [0] => Array
                (
                    [product_id] => 12
                    [price] => 100
                    [quantity] => 2
                )
            [1] => Array
                (
                    [product_id] => 11
                    [price] => 400
                    [quantity] => 7
                )
        )
)

由于我们的uri有一个访问令牌,该令牌也会在某个时间点后过期,因此我们必须刷新它并获取新的访问令牌,从而得到一个新的uri。

我无法在apollo文档中找到有关更新uri的方法的任何方法(也许我错过了吗?),如果我创建了这样的新实例,还会抛出一个错误,提示apollo客户端已经存在礼物。

有什么方法可以更新uri吗?

2 个答案:

答案 0 :(得分:1)

我知道它不是Apollo Angular文档的一部分(欢迎PR!),但是我在apollo-angular-link-http的自述文件中对此进行了描述。

有两种方法:

使用Apollo链接拦截查询并在上下文中设置uri属性

const authMiddleware = setContext((operation, { uri }) => {
  return refreshToken().then(res => ({
    uri: this.getURI()
  })
}))

或者使用Angular的HttpClient拦截器拦截请求并更改端点。

Link to the package

答案 1 :(得分:0)

我能够这样替换它:

    this.apollo.removeClient();
    this.apollo.create({
      cache: new InMemoryCache(),
      link: this.httpLink.create({
        uri: '<new-backend-url>',
      })
    });