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 в какой-то момент, прежде чем этот код оценивает.

Другие вопросы по тегам