GraphQL 错误:必须提供名称

Piy*_*sal 3 mongodb node.js graphql express-graphql

我正在编写用于在 NodeJS 中登录用户的突变。

它给出错误“必须提供名称”。

这是浏览器 GraphQL 查询:

mutation{
  login(username:"dfgdfg",password:"test1234") {
    _id,
    name{
      fname,
      lname,
      mname
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码

    const login = {
    type: UserType,
    args: {
        input:{
            name:'Input',
            type: new GraphQLNonNull(new GraphQLObjectType(
                {
                    username:{
                    name:'Username',
                    type: new GraphQLNonNull(GraphQLString)
                    },
                    password:{
                    name:'Password',
                    type: new GraphQLNonNull(GraphQLString)
                    }
                }
            ))

        }
    },
    resolve: async (_, input, context) => {
        let errors = [];
        return UserModel.findById("5b5c34a52092182f26e92a0b").exec();

    }
  }

module.exports = login;
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决为什么会出现错误吗?

提前致谢。

Her*_*rku 5

描述错误发生的位置也非常有帮助。我假设它是在启动节点服务器时抛出的。

抛出此特定错误是因为您缺少name对象配置第 8 行中的属性。而且这种类型也不能GraphQLInputObjectTypeGraphQLObjectType

args: {
    input: {
        type: new GraphQLNonNull(new GraphQLInputObjectType({
            name: 'LoginInput',
            fields: {
                username:{
                    name:'Username',
                    type: new GraphQLNonNull(GraphQLString)
                },
                password:{
                    name:'Password',
                    type: new GraphQLNonNull(GraphQLString)
                }
            }
        }))
    }
},
Run Code Online (Sandbox Code Playgroud)

您的代码中还有很多问题:

您的代码中未使用所有name属性(您可能添加它们是为了修复错误)。

您的查询与架构定义不匹配,要么有两个参数username,要么password直接在字段上,而不是在额外的输入类型中:

args: {
    username:{
        name:'Username',
        type: new GraphQLNonNull(GraphQLString)
    },
    password:{
        name:'Password',
        type: new GraphQLNonNull(GraphQLString)
    }
},
Run Code Online (Sandbox Code Playgroud)

或者按照安东尼的描述采用您的查询:

mutation{
  login(input: { username: "dfgdfg",password: "test1234" }) {
    _id,
    name{
      fname,
      lname,
      mname
    }
  }
}
Run Code Online (Sandbox Code Playgroud)