apollo - 如何动态更改 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,以便在需要重新建立连接时提供新令牌?
解决方案
您可以在函数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
]),
...
}
推荐阅读
- win32com - Python通过添加通过外部连接刷新excel中的数据不起作用
- kubernetes - Kubernetes 节点显然充当主节点,但缺少正确的标记
- deep-learning - 如何计算 Mini-batch 的 MSE?
- c++ - 调用 current_exception() 时抛出 bad_exception
- react-native - 标识符已被声明为 react native
- javascript - 可以在客户端记录用户输入的控制台命令吗?
- scala - 限制来自 Spark 执行器的并发 HTTP 请求
- javascript - 如何将两个不同函数的乘积相加成一个新函数?
- file-io - Git 结帐速度 - 钩子下
- android - 在从 FirebaseMessagingService 扩展的类中找不到 getApplicationContext()