突变返回 400 错误,但在 GraphiQL 中有效

Posted

技术标签:

【中文标题】突变返回 400 错误,但在 GraphiQL 中有效【英文标题】:Mutation returns 400 error but works in GraphiQL 【发布时间】:2018-08-04 17:04:59 【问题描述】:

我一直在学习教程并尝试使用 react 和 express 学习 graphql,但我遇到了麻烦。当我将它插入 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

我可以发送查询并获得结果,但突变似乎更难。

任何帮助将不胜感激,谢谢!

【问题讨论】:

您能粘贴从 400 错误返回的确切消息吗?您可能会在快速服务器的终端中收到有用的错误消息 我已经用完整的错误更新了这个问题。我觉得这个错误没有出现在 GraphiQL 中很奇怪 【参考方案1】:

graphiql 可能对你的语法很宽容,但对我来说它看起来不太正确。我希望是这样的:

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

【讨论】:

以上是关于突变返回 400 错误,但在 GraphiQL 中有效的主要内容,如果未能解决你的问题,请参考以下文章

石墨烯突变返回 400 - 不会正确传递 id 字段

graphiql 突变请求成功但返回 null

当 Graphiql 和 Altair 以完全相同的突变成功时,React Apollo 返回 Null?

Graphql 突变返回 Post 400 错误,不知道如何解决

React native 的中继突变返回 400 错误请求?

尝试在 Graphiql 上进行 Graphql 突变