Я пытаюсь передать переменную в 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
Спасибо! но как мне объявить параметр input
? ($input: JSON!)
не работает... та же ошибка 400?
читать спецификации API, должны соответствовать декларации BE
Привет, @xadm, большое спасибо за руководство!! Даже если изначально это неясно, поскольку я новичок в этом, ваш комментарий действительно помогает! Я никогда не думаю, что это будет updateAddressInput
как указано в SDL хахаха
Вам нужно убедиться, что ваш запрос (включая мутацию) такой же (имеет те же переменные), что и указано в SDL.
Если вы используете Strapi, есть ошибка, из-за которой параметр типа ID
должен быть указан, поскольку $id
не может быть чем-то другим, не знаю, как это получается, но если вы нашли 400 ошибок там, где этого быть не должно, попробуйте проверить если есть какой-либо тип ID
, объявленный не совсем так, как $id
, надеюсь, это кому-то поможет
если входной идентификатор API имеет тип ID!
, тогда переменная для этого идентификатора должна быть объявлена как $id: ID!
, а не $id: ID
@xadm вы знаете, почему это должно быть $id: ID!
, а не $addressId: ID!
, это так странно, это должно быть просто имя параметра, но это приводит к его поломке
случай? ... это должно работать, поскольку $startedNameVariableCanBeAnything
- это просто имя переменной, динамическая часть, просто определяет элемент словаря, "потребляется" на этапе синтаксического анализа (специальное требование Shopify?) ... имя ввода (левая часть someInputId: $someVariableId
) должно совпадать (определено API имя ввода) на «потребляющей части», в запросе «тело»
вы можете проверить мутацию в graphiql, используя «переменные запроса» .... подготовить все
input
в js и передать как переменную