Я пытаюсь использовать динамическую переменную в запросе GraphQL с помощью клиента Apollo. Я следил за документацией, но Apollo продолжает выдавать мне ошибки, говоря, что мои переменные не определены, и в конечном итоге отвечает кодом состояния 400.
Вот что говорится в документации для Apollo:
mutate: (options?: MutationOptions) => Promise A function to trigger a mutation from your UI. You can optionally pass variables, optimisticResponse, refetchQueries, and update in as options, which will override any props passed to the Mutation component. The function returns a promise that fulfills with your mutation result.
И вот код, который я пытался написать:
const fetch = require('node-fetch');
const ApolloClient = require('apollo-boost').default;
const gql = require('graphql-tag');
const client = new ApolloClient({
uri: "http://api.domain.com/graphql",
fetch
});
run();
async function run() {
try {
const resp = await client.mutate({
mutation: gql`mutation {
trackPr(id: $id, pr: $pr, title: $title, body: $body, state: $state, merged: $merged) {
id
}
}`,
variables: {
id: 1,
pr: 1,
title: "test title",
body: "test body",
state: "test state",
merged: false
},
});
console.info(resp.data);
} catch(ex) {
console.info(ex);
}
}
Затем я получу сообщение об ошибке для каждой переменной о том, что она не определена:
[GraphQL error]: Message: Variable "$id" is not defined., Location: [object Object],[object Object], Path: undefined
После каждого из этих сообщений об ошибках я получаю последнее сообщение с кодом состояния 400:
[Network error]: ServerError: Response not successful: Received status code 400
Сама мутация работает нормально без переменных и всех значений, установленных непосредственно в мутации, но я не знаю, почему она считает, что переменные не определены.





Любые переменные, используемые внутри операции, должны быть объявлены как часть определения операции, например:
mutation SomeOptionalMutationName ($id: ID!) {
trackPr(id: $id) {
id
}
}
Это позволяет GraphQL проверять ваши переменные на соответствие предоставленному типу, а также проверять, используются ли переменные вместо правильных входных данных.