Мутация возвращает ошибку 400, но работает в GraphiQL

Я следил за учебниками и пытался изучить graphql с помощью response and express, и у меня возникли проблемы. Моя мутация работает, когда я подключаю ее к graphiql, но не когда вызываю ее из своего клиента.

Код клиента:

async addBook(params) {
    var title = params["title"];
    var author = params["author"];
    var src = params["src"];

    var mutation = `
        { addBook($author: String!, $title: String!, $src: String!) {
            addBook(author: $author, title: $title, src: $src) {
                id
                title
            }
        } 
    }`;

    const res = await fetch(this.apiUrl, {
        method: 'POST',
        mode: 'cors',
        headers: new Headers({
            'Content-Type': 'application/json',
            'Accept': 'application/json',
        }),
        body: JSON.stringify({
            query: mutation,
            variables: {author: author, title: title, src: src}
        }),
    });
    if (res.ok) {
        const body = await res.json();
        console.log(body.data);
        return body.data;
    } else {
        throw new Error(res.status);
    }
}

Код схемы:

const typeDefs = `
    type Book {
        id: ID!
        author: String!
        title: String!
        src: String!

    }

    type Query {
        Books: [Book]
    }

    type Mutation {
        addBook(author: String, title: String, src: String): Book
    }
`;

Резольвер

Mutation: {
    addBook: (root, args) => {
        const newBook = {id: Books.length+1, author: args.author, title: args.title, src: args.src};
        Books.push(newBook);
        return newBook;
    },
},

Ошибка

{"errors":[{"message":"Syntax Error GraphQL request (2:25) Expected Name, found $\n\n1: \n2:             { mutation ($author: String!, $title: String!, $src: String!) {\n                           ^\n3:                 addBook(author: $author, title: $title, src: $src) {\n","locations":[{"line":2,"column":25}]}]}

Моя «база данных» - это файл .js, содержащий файл const books

Я могу отправлять запросы и получать результаты, но мутации, кажется, сложнее.

Любая помощь будет принята с благодарностью, спасибо!


person Hjelmut4    schedule 24.02.2018    source источник
comment
Вы можете вставить точное сообщение, возвращаемое при ошибке 400? вы, вероятно, получаете полезное сообщение об ошибке в терминале вашего экспресс-сервера   -  person azium    schedule 25.02.2018
comment
Я обновил вопрос с полной ошибкой. Мне кажется странным, что эта ошибка не появляется в GraphiQL.   -  person Hjelmut4    schedule 25.02.2018


Ответы (1)


graphiql, вероятно, снисходительно относится к вашему синтаксису, но мне он кажется не совсем правильным. Я ожидал чего-то вроде этого:

var mutation = `
    mutation AddBook($author: String!, $title: String!, $src: String!) {
        addBook(author: $author, title: $title, src: $src) {
            id
            title
        }
    } 
`;
person azium    schedule 24.02.2018