代码之家  ›  专栏  ›  技术社区  ›  Piyush Bansal

GraphQL错误:必须提供名称

  •  0
  • Piyush Bansal  · 技术社区  · 8 年前

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

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

    以下是浏览器图形查询:

    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;
    

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

    提前谢谢。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Herku    8 年前

    描述一下 哪里 出现错误。我假设它是在启动节点服务器时抛出的。

    由于缺少 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)
                    }
                }
            }))
        }
    },
    

    代码中还有很多问题:

    所有的 名称 您的代码中没有使用属性(您可能是在尝试修复错误时添加的)。

    查询与架构定义不匹配,或者有两个参数 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
        }
      }
    }