Проблема с настройкой клиента apollo на nextJS для подписок - PullRequest
0 голосов
/ 26 сентября 2019

Итак, клиент 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 || {})
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...