ApolloClient: Invariant Violation 1 - правильно настроить клиент apollo
Я новичок в GraphQL и Apollo, и я действительно борюсь с настройкой apolloClient в node.js.
Сначала я хочу упомянуть, что я успешно настроил клиент apollo в nuxt с помощью модуля apollo nuxt.
Поэтому я полностью уверен, что моя конечная точка и мой токен работают.
Теперь я хотел настроить клиент apollo в файле JavaScript, который я хочу запустить в node.js.
import fetch from 'node-fetch'
import gql from 'graphql-tag'
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
import { setContext } from 'apollo-link-context'
export default function generateRoutesFromData(
options = {
api: [],
query: '',
token: '',
bundle: '',
homeSlug: 'home',
errorPrefix: 'error-'
}
) {
const uri = 'https://example.com/api'
const token =
'...fPsvYqkheQXXmlWgb...'
const httpLink = createHttpLink({ uri, fetch })
const authLink = setContext((_, { headers }) => {
// return the headers to the context so httpLink can read them
return {
headers: {
...headers,
authorization: `Bearer ${token}`
}
}
})
const GET_PAGES = gql`
{
helloWorld
}
`
const client = new ApolloClient({
link: authLink.concat(httpLink),
fetch
})
client
.query({
query: GET_PAGES
})
.then(result => {
console.log('result: ', result)
})
.catch(error => {
console.log('error: ', error)
})
// for now just return array with a test string
// later on: return all uris fetched via graphql
return ['/test']
}
Если я запускаю это в узле, я получаю следующую ошибку:
ФАТАЛЬНОЕ Нарушение Инварианта: 1 (см. https://github.com/apollographql/invariant-packages) 00:05:36
Нарушение инварианта: Нарушение инварианта: 1 (см. https://github.com/apollographql/invariant-packages)
в новом InvariantError (пакеты /.../node_modules/ts-invariant/lib/invariant.js:16:28)
в новом ApolloClient (пакеты /.../node_modules/apollo-client/bundle.umd.js:2483:55)
в generateRoutesFromData (пакеты /.../ src / routs/generateRoutesFromData.js:41:18) в объекте. (nuxt.config.js:158:10) в Generator.next ()
Я погуглил около 1,5 часов и не сделал никакого прогресса... Сообщение об ошибке очень загадочно, и я не знаю, что я мог сделать.
Я должен сказать, что вся документация вокруг Аполлона довольно запутанная. Apollo-boost и который оборачивает клиента apollo всем остальным. Различные способы аутентификации и т. Д.
Я нашел эту страницу: https://www.apollographql.com/docs/react/advanced/boost-migration/ Но она кажется довольно сложной, и я не уверен, поможет ли это мне хоть чем-то...
Любая помощь с этим очень ценится! Ура м
1 ответ
В вашей конфигурации клиента отсутствует cache
:
const client = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache(), // <-- ADD ME
})
Это фактическая ошибка, которую вы видите:
Чтобы инициализировать Apollo Client, вы должны указать свойства 'link' и 'cache' в объекте параметров. Эти параметры являются частью требований к обновлению при переходе с Apollo Client 1.x на Apollo Client 2.x. Для получения дополнительной информации, пожалуйста, посетите: https://www.apollographql.com/docs/tutorial/client.html
Инвариантные ошибки преднамеренно запутываются в производстве. Я не уверен, почему вы бы видели это поведение локально, но, возможно, Nuxt устанавливает NODE_ENV
в production
в какой-то момент, прежде чем этот код оценивает.