目前,我已经像这样建立了Apollo的网络套接字链接:
const wsLink = new WebSocketLink({
uri: `ws://example.com/graphql?token=${getToken()}`,
options: {
reconnect: true,
connectionParams(): ConnectionParams {
return {
authToken: getToken(),
};
},
},
});
当连接持续时,此方法工作正常,但如果查询字符串中的令牌已过期,则在需要重新建立连接时失败。
我正在处理的基础设施的设置方式要求将此令牌设置为URI中的查询参数。如何动态更改URI,以便在需要重新建立连接时可以提供新的令牌?
答案 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
]),
...
}