Передать переменную на сервер `mutation` apollographql

Я пытаюсь передать переменную в mutation через javascript-клиент apollo, однако он всегда возвращает ошибку 400: [Error: Response not successful: Received status code 400], что указывает на то, что с моим запросом что-то не так.

ниже мой запрос:

const SET_ADDRESS_LASTUSED = gql`
  mutation UpdateAddress($phone: String!, $name: String!) {
    updateAddress(input: {
      where: {
        phone: $phone
      },
      data: {
        name: $name
      }
    }) {
      address {
        name
        phone
      }
    }
  }
`;

Я вызываю мутацию следующим образом:

const [updateLastUsed, updateLastUsedResult] = useMutation(SET_ADDRESS_LASTUSED);

          // sometime later,
          updateLastUsed({
            variables: {
              phone: "+12345678910",
              name: "WhyICanNotChangeMyName?",
            },
          });

что-то не так, чего я не заметил? Я мог бы успешно мутировать, если бы жестко закодировал переменную таким образом, но, конечно, я не могу сделать это таким образом.

const SET_ADDRESS_LASTUSED = gql`
  mutation {
    updateAddress(input: {
      where: {
        phone: "+12345678910"
      },
      data: {
        name: "ICanChangeMyName!"
      }
    }) {
      address {
        name
        phone
      }
    }
  }
`;

Пожалуйста помоги. Я часами бессмысленно отлаживал... Я всегда могу передать переменную в query, используя аналогичный способ :(

Кстати, я использую Strapi Server

Заранее спасибо!

Ссылка: https://www.apollographql.com/docs/react/api/react/hooks/https://strapi.io/documentation/developer-docs/latest/plugins/graphql.html#graphql

вы можете проверить мутацию в graphiql, используя «переменные запроса» .... подготовить все input в js и передать как переменную

xadm 22.12.2020 18:48

Спасибо! но как мне объявить параметр input? ($input: JSON!) не работает... та же ошибка 400?

Zennichimaro 23.12.2020 02:16

читать спецификации API, должны соответствовать декларации BE

xadm 23.12.2020 02:40

Привет, @xadm, большое спасибо за руководство!! Даже если изначально это неясно, поскольку я новичок в этом, ваш комментарий действительно помогает! Я никогда не думаю, что это будет updateAddressInput как указано в SDL хахаха

Zennichimaro 23.12.2020 14:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
2
4
194
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вам нужно убедиться, что ваш запрос (включая мутацию) такой же (имеет те же переменные), что и указано в SDL.

Если вы используете Strapi, есть ошибка, из-за которой параметр типа ID должен быть указан, поскольку $id не может быть чем-то другим, не знаю, как это получается, но если вы нашли 400 ошибок там, где этого быть не должно, попробуйте проверить если есть какой-либо тип ID, объявленный не совсем так, как $id, надеюсь, это кому-то поможет

если входной идентификатор API имеет тип ID!, тогда переменная для этого идентификатора должна быть объявлена ​​как $id: ID!, а не $id: ID

xadm 23.12.2020 14:54

@xadm вы знаете, почему это должно быть $id: ID!, а не $addressId: ID!, это так странно, это должно быть просто имя параметра, но это приводит к его поломке

Jenny Kim 23.12.2020 15:06

случай? ... это должно работать, поскольку $startedNameVariableCanBeAnything - это просто имя переменной, динамическая часть, просто определяет элемент словаря, "потребляется" на этапе синтаксического анализа (специальное требование Shopify?) ... имя ввода (левая часть someInputId: $someVariableId) должно совпадать (определено API имя ввода) на «потребляющей части», в запросе «тело»

xadm 23.12.2020 15:13

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