Я пытаюсь подключить клиента apollo, чтобы он мог обслуживать как стандартные запросы http, так и запросы websocket для подписок. Вот моя конфигурация клиента ...
import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { HttpLink } from 'apollo-link-http';
import { onError } from 'apollo-link-error';
import { ApolloLink } from 'apollo-link';
import { WebSocketLink } from 'apollo-link-ws';
import { SubscriptionClient } from 'subscriptions-transport-ws';
const prod = process.env.NODE_ENV === 'production';
const subscriptionClient = new SubscriptionClient(
`ws${prod ? 's' : ''}://${
prod ? '**********.herokuapp.com' : 'localhost'
}:${prod ? '80' : '5000'}/subscription`,
{
reconnect: true,
lazy: true,
},
);
subscriptionClient.maxConnectTimeGenerator.setMin(10000);
const client = new ApolloClient({
link: ApolloLink.from([
onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors)
graphQLErrors.forEach(({ message, locations, path }) =>
console.log(
`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`,
),
);
if (networkError) console.log(`[Network error]: ${networkError}`);
}),
new WebSocketLink(subscriptionClient),
new HttpLink({
uri: `http${prod ? 's' : ''}://${
prod ? '**********.herokuapp.com' : 'localhost'
}:${prod ? '80' : '5000'}/graph`,
credentials: 'same-origin',
}),
]),
cache: new InMemoryCache(),
});
export default client;
Интересно, что этот клиент на самом деле работает ... в основном. Это позволяет мне делать запросы через http и настраивать подписки через ws. Все это, несмотря на то, что при загрузке страниц выдает ошибку.
Error: "You are calling concat on a terminating link, which will have no effect"
Я провел небольшое исследование по этой теме, но не смог найтирешение. По сути, ссылки apollo могут быть как прекращающими, так и не прекращающимися. Не прекращается, так что они могут быть связаны друг с другом. Но они должны заканчиваться завершающей ссылкой, когда отправляет запрос. Я не уверен, насколько это точно, но это мое нынешнее понимание. И, очевидно, HttpLink и WebSocketLink завершаются.
Учитывая то, как запросы и подписки работали с этой конфигурацией, я решил игнорировать ошибку, но теперь я столкнулся с другими проблемами, которые, по моему мнению,быть симптомами этой ошибки. Решающие элементы на сервере становятся неопределенными для объекта запроса.
Мне сказали, что можно настроить клиент на выполнение как HTTP, так и WS. Буду признателен за любые рекомендации по этому вопросу.
Спасибо