3

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

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

这是浏览器 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;

谁能帮我弄清楚为什么它会出错?

提前致谢。

4

1 回答 1

4

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

抛出此特定错误是因为您缺少name对象配置第 8 行中的属性。这种类型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属性(您可能添加了它们以尝试修复错误)。

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

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

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

mutation{
  login(input: { username: "dfgdfg",password: "test1234" }) {
    _id,
    name{
      fname,
      lname,
      mname
    }
  }
}
于 2018-08-04T13:18:18.887 回答