如何动态更改Apollo Web套接字链接URI?

时间:2019-10-23 12:24:08

标签: apollo apollo-client apollo-link

目前,我已经像这样建立了Apollo的网络套接字链接:

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以在功能 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
        ]),
        ...
    }