如何动态更改 Apollo Web Socket Link URI?

Posted

技术标签:

【中文标题】如何动态更改 Apollo Web Socket Link URI?【英文标题】:How to dynamically change Apollo Web Socket Link URI? 【发布时间】:2020-02-19 16:46:09 【问题描述】:

目前我已经像这样设置了 Apollo 的 web socket 链接:

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

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

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

【问题讨论】:

【参考方案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
        ]),
        ...
    

【讨论】:

以上是关于如何动态更改 Apollo Web Socket Link URI?的主要内容,如果未能解决你的问题,请参考以下文章

五分钟带你玩转apollo引子

如何使用 Apollo 更改道具上的查询?

如何使用 Apollo 在 Nuxt 生成的动态页面中正确填充页眉?

如何通过 jQuery 动态更改内容编辑器 Web 部件标题?

如何使用 Apollo GraphQL 更改查询值(其中: )

如何在 Eclipse 中更改动态 Web 项目的上下文根?