Итак, клиент Apollo работает для выполнения запросов к GraphQL и вызовов мутаций, но когда я настраиваю Websocket Link, я получаю сообщение об ошибке в браузере: Error: ws does not work in the browser. Browser clients must use the native WebSocket object
.
Я пытался следовать этой статье, но безуспешно -> https://github.com/apollographql/subscriptions-transport-ws/issues/333
const isBrowser = typeof window !== 'undefined';
const authLink = setContext((_, { headers }) => {
const token = getToken();
console.log('Token', token);
// return the headers to the context so httpLink can read them
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : "",
}
}
});
const wsLink = isBrowser ? new WebSocketLink({
uri: 'ws://127.0.0.1:8080/v1/graphql',
options: {
lazy: true,
reconnect: true,
connectionParams: () => {
const token = getToken();
return {headers: {Authorization: `Bearer ${token}`}}
}
},
webSocketImpl: ws
}): null;
const terminatingLink = isBrowser ? split(
({ query }) => {
const { kind, operation } = getMainDefinition(query);
return kind === "OperationDefinition" && operation === "subscription";
},
wsLink,
authLink.concat(httpLink)
): authLink.concat(httpLink);
const link = ApolloLink.from([reportErrors, terminatingLink]);
return new ApolloClient({
connectToDevTools: isBrowser,
ssrMode: !isBrowser, // Disables forceFetch on the server (so queries are only run once)
link: link,
cache: new InMemoryCache().restore(initialState || {})
});
}