如何动态更改 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 在 Nuxt 生成的动态页面中正确填充页眉?
如何通过 jQuery 动态更改内容编辑器 Web 部件标题?