#javascript #next.js #apollo #apollo-client
Вопрос:
Я пытаюсь использовать BatchHttpLink
для пакетных запросов от apollo в nextjs
приложении, использующем приведенную ниже конфигурацию:
import fetch from 'isomorphic-unfetch';
import { ApolloProvider, ApolloClient, ApolloLink, from } from '@apollo/client';
import { onError } from '@apollo/client/link/error';
import { BatchHttpLink } from '@apollo/client/link/batch-http';
const batchHttpLink = new BatchHttpLink({
uri: process.env.GRAPHQL_URL,
batchMax: 5,
batchInterval: 20,
credentials: 'same-origin',
fetch
});
/**
* to parse batch call response
* See more https://spectrum.chat/apollo/apollo-client/batchhttplink-not-working-with-usequery-react-hooks~3eeb6635-c5a8-4b8a-a2fd-3b7fbebc5816
*/
const parseBatchResponseMiddleware = new ApolloLink((operation, forward) =>
forward(operation).map((data: any) => data.payload)
);
const errorLink = onError(({ graphQLErrors, networkError, forward, operation }) => {
if (graphQLErrors) {
console.warn(graphQLErrors);
}
if (networkError) {
console.warn(networkError);
}
forward(operation);
});
return new ApolloClient({
ssrMode: typeof window === 'undefined',
link: from([parseBatchResponseMiddleware, errorLink, authLink.concat(batchHttpLink)]),
cache: new InMemoryCache({
possibleTypes: introspectionToPossibleTypes(introspectionQueryResultData)
})
});
Я добавил parseBatchResponseMiddleware
, чтобы проанализировать пакетный ответ. Когда я запускаю приложение в режиме разработки, все кажется правильным, но как только я создаю приложение в среде prod, оно возвращает 500-внутреннюю ошибку сервера:
Ошибка типа: значение.subscribe не является функцией в Object.complete (/…/node_modules/@apollo/client/utilities/observables/Concast.js:57:43) в Concast.start (/…/node_modules/@apollo/client/utilities/observables/Concast.js:83:23) в новом Конкасте (/…/node_modules/@apollo/client/utilities/observables/Concast.js:75:19) в QueryManager.getObservableFromLink (/…/node_modules/@apollo/client/core/QueryManager.js:551:35) в QueryManager.getResultsFromLink (/…/node_modules/@apollo/client/core/QueryManager.js:590:30) в результатах по ссылке (/…/node_modules/@apollo/client/core/QueryManager.js:755:26) в QueryManager.fetchQueryByPolicy (/…/node_modules/@apollo/client/core/QueryManager.js:782:21) в fromVariables (/…/node_modules/@apollo/client/core/QueryManager.js:638:26) в QueryManager.fetchQueryObservable (/…/node_modules/@apollo/client/core/QueryManager.js:645:15) в QueryManager.fetchQuery (/…/node_modules/@apollo/client/core/QueryManager.js:260:21) в QueryManager.запрос (/…/node_modules/@apollo/client/core/QueryManager.js:345:21) в Аполлоклиенте.запрос (/…/node_modules/@apollo/client/core/ApolloClient.js:133:34) на Функции.Z. t.getInitialProps (/…/src/.next/сервер/страницы/_app.js:158:151526) в функции.B.r.getInitialProps (/…/src/.next/сервер/страницы/_app.js:158:147992)
Любые идеи по решению этой проблемы высоко ценятся.