Мутация GraphQL: нарушение инварианта: должно содержать определение запроса

Я пытаюсь сделать вызов mutation на мой сервер graphQL из реагирующего приложения. Код реакции выглядит следующим образом:

client.query({
  query: gql`
    mutation{
        addTeam(input:{name:"Somename", label:"somelabel"})
        {error, status}
    }`
 }).then((resp: any) => {
      console.info("Success", resp);
 }).catch(err => {
      throw err;
 })

И я получаю следующую ошибку:

Мутация GraphQL: нарушение инварианта: должно содержать определение запроса

Но если я изменю тот же запрос с mutation на query и внесу необходимые изменения в свой node-graphQL-сервер, чтобы обрабатывать его как query вместо mutation, тот же код будет работать.

Аполлон-Клиент Mutationдокументы говорят

In GraphQL, mutations are identical to queries in syntax, the only difference being that you use the keyword mutation instead of query...

Да, кстати, тот же mutation запрос РАБОТАЕТ в Playground. Пожалуйста, помогите, ребята, моя работа остановилась из-за этой проблемы.

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
25
0
26 872
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В настоящее время существует проблема GitHub, в которой говорится об этой ошибке: https://github.com/apollographql/apollo-client/issues/1539.

Ответ принят как подходящий

Вы должны использовать метод mutate клиента для мутаций, а не метод query. Опции метода можно найти в документах. Apollo имеет собственное мнение о том, как обрабатываются запросы и мутации, поэтому у каждого метода есть разные параметры, соответствующие поведению каждой операции (например, mutate включает параметр refetchQueries).

client.mutate({
  mutation: gql`
    mutation {
      addTeam(input:{name:"Somename", label:"somelabel"}) {
        error
        status
      }
    }`,
})

Большое спасибо, я не знал, что я был пользователем «client.query» для мутации. +1

Siddhartha Chowdhury 16.03.2019 23:53

Боже! "client.mutate"... кто знал?

anthony galligani 10.06.2020 22:47

Этот ответ решил мою проблему, но можно ли это сделать с помощью одной строки gql, а не объекта mutation (где mutation используется дважды)? Я использую вызов @rest из Документы клиента Apollo. Они используют gql строку запроса, за которой следует client.query({ query }) вызов API. Любопытно, возможно ли это с теми же входными данными, которые вы использовали здесь.

Farid 03.09.2020 20:23

ваша ссылка на документ больше не работает, не могли бы вы обновить ее, пожалуйста?

Morgan Smith 23.02.2021 16:18

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