GraphQL 错误:必须提供名称

Posted

技术标签:

【中文标题】GraphQL 错误:必须提供名称【英文标题】:GraphQL Error : Must provide name 【发布时间】:2019-01-11 23:06:39 【问题描述】:

我正在为 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;

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

提前致谢。

【问题讨论】:

你能显示你的突变或来自浏览器的查询吗 我更新了问题并提出了graphQL浏览器变异查询。请检查。 尝试在输入参数而不是突变login函数参数中传递name,并且突变应该是这样的mutation login(input: $input) _id, name fname, lname, mname 【参考方案1】:

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

抛出此特定错误是因为您在对象配置的第 8 行中缺少 name 属性。这个类型也需要是GraphQLInputObjectTypenot 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
    
  

【讨论】:

以上是关于GraphQL 错误:必须提供名称的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 错误“字段必须是以字段名称作为键的对象或返回此类对象的函数。”

为啥我收到错误“必须提供查询字符串”。快递-graphql?

GraphQL:错误:必须提供文档

Apollo GraphQL 错误:必须提供查询根类型

嵌套查询 GraphQL:语法错误 - iOS

React 和 Nexus Graphql 服务器上的 Apollo 客户端出现“必须提供查询字符串”错误