GraphQL Error : Must provide name

GraphQL Error : Must provide name

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

给出错误 "Must Provide Name"。

这是浏览器 GraphQL 查询:

mutation{
  login(username:"dfgdfg",password:"test1234") {
    _id,
    name{
      fname,
      lname,
      mname
    }
  }
}

这是我的代码

    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;

谁能帮我看看为什么会报错?

提前致谢。

描述哪里错误发生也很有帮助。我假设它是在您启动节点服务器时抛出的。

抛出此特定错误是因为您在对象配置的第 8 行中缺少 name 属性。此外,此类型需要 GraphQLInputObjectType 而不是 GraphQLObjectType

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

你的代码还有一堆问题:

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

您的查询与架构定义不匹配,请直接在字段中使用两个参数 usernamepassword,而不是在额外的输入类型中:

args: {
    username:{
        name:'Username',
        type: new GraphQLNonNull(GraphQLString)
    },
    password:{
        name:'Password',
        type: new GraphQLNonNull(GraphQLString)
    }
},

或按照 Anthony 的描述采用您的查询:

mutation{
  login(input: { username: "dfgdfg",password: "test1234" }) {
    _id,
    name{
      fname,
      lname,
      mname
    }
  }
}