首页 > 解决方案 > 如何动态更改 Apollo Web Socket Link URI?

问题描述

目前我已经设置了 Apollo 的 web socket 链接,如下所示:

const wsLink = new WebSocketLink({
  uri: `ws://example.com/graphql?token=${getToken()}`,
  options: {
    reconnect: true,
    connectionParams(): ConnectionParams {
      return {
        authToken: getToken(),
      };
    },
  },
});

这在连接持续时工作正常,但如果查询字符串中的令牌已过期,则需要重新建立连接时会失败。

我正在处理的基础设施的设置方式要求将此令牌设置为 URI 中的查询参数。如何动态更改 URI,以便在需要重新建立连接时提供新令牌?

标签: apolloapollo-clientapollo-link

解决方案


您可以在函数setContext https://www.apollographql.com/docs/link/links/context/中手动设置属性wsLink.subscriptionClient.url(或创建一个新的 subscriptionClient 实例?)。

例如:

import { setContext } from 'apollo-link-context'
...

    const wsLink = your code...     

    const authLink = setContext(() => {
        wsLink.subscriptionClient.url = `ws://example.com/graphql?token=${getToken()}`
    })

    ...

    const config = {
        link: ApolloLink.from([
            authLink,
            wsLink
        ]),
        ...
    }

推荐阅读