Клиент Apollo: Переменная не определена.Получен код состояния 400 - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь использовать динамическую переменную в запросе GraphQL с использованием клиента Apollo. Я следовал за документацией, но Аполлон продолжает давать мне ошибки, говоря, что мои переменные не определены, и в конечном итоге отвечает кодом состояния 400.

Вот что сказано в документации для Аполлона:

mutate: (options ?: MutationOptions) => Обещание Функция для запуска мутации из вашего пользовательского интерфейса. При желании вы можете передавать переменные, optimisticResponse, refetchQueries и update в качестве параметров, которые будут переопределять любые реквизиты, передаваемые компоненту Mutation. Функция возвращает обещание, которое соответствует вашему результату мутации.

А вот код, который я пытался написать:

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.log(resp.data);
    } catch(ex) {
        console.log(ex);
    }
}

Затем я получу сообщение об ошибке для каждой переменной, говорящее, что она не была определена:

[Ошибка GraphQL]: Сообщение: переменная "$ id" не определена., Местоположение: [объект объекта], [объект объекта], путь: не определено

После каждого из этих сообщений об ошибках я получаю окончательное сообщение с кодом состояния 400:

[Сетевая ошибка]: Ошибка сервера: Ответ не выполнен: Получен код состояния 400

Сама мутация работает нормально без переменных и всех значений, установленных непосредственно в мутации, но я не знаю, почему она считает, что переменные не определены.

1 Ответ

0 голосов
/ 23 января 2019

Любые переменные, используемые внутри операции, должны быть объявлены как часть определения операции, например:

mutation SomeOptionalMutationName ($id: ID!) {
  trackPr(id: $id) {
    id
  }
}

Это позволяет GraphQL проверять ваши переменные по предоставленному типу, а также проверять, что переменные используются вместо правильных входных данных.

...