Как динамически изменить URI ссылки Apollo Web Socket Link?
В настоящее время я настроил ссылку на веб-сокет Apollo следующим образом:
const wsLink = new WebSocketLink({
uri: `ws://example.com/graphql?token=${getToken()}`,
options: {
reconnect: true,
connectionParams(): ConnectionParams {
return {
authToken: getToken(),
};
},
},
});
Это работает нормально, пока существует соединение, но не работает, когда соединение необходимо восстановить, если срок действия токена в строке запроса истек.
Способ настройки инфраструктуры, с которой я имею дело, требует, чтобы этот токен был установлен в качестве параметра запроса в URI. Как я могу динамически изменить URI, чтобы я мог предоставить новый токен, когда соединение необходимо повторно установить?
1 ответ
Вы можете установить свойство wsLink.subscriptionClient.url вручную (или создать новый экземпляр subscriptionClient?) В функции setContext https://www.apollographql.com/docs/link/links/context/.
Например:
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
]),
...
}