无法解决 Playground 错误:未提供所需类型 \"MemberInput!\" 的变量 \"$input\"

Pre*_*ton 1 graphql nestjs

我已经在这个问题上击败了一个星期,但网上没有任何解决办法。不返回数据对象,甚至不返回“null”。我正在从工作的 REST CRUD 应用程序转换为 GraphQL。没有我想象的那么容易。

我在 Playground 中的突变:

mutation createMember($input: MemberInput!) {
    createMember (input: $input) {
          first_name
          last_name
          user_name
    }
}
Run Code Online (Sandbox Code Playgroud)

以下 Playground 查询变量:(不在标题部分。)

{
  "input": {
    "first_name": "John",
    "last_name": "Creston",
    "user_name": "jc"
    }
}
Run Code Online (Sandbox Code Playgroud)

模式:(查询工作正常,成员类型,TypeORM 中的一个实体,与它们和完整的 REST CRUD 一起使用。)

input MemberInput {
    first_name: String!
    last_name: String!
    user_name: String!
}

type Mutation {
    createMember(input: MemberInput!): Member!
}

type Query {
    getMembers: [Member]
    getMember(member_id: Int!): Member!
    checkUserName(user_name: String): Member
    checkEmail(email: String): Member
}
Run Code Online (Sandbox Code Playgroud)

我不知道解析器如何成为此错误消息的问题,但我将添加 Nestjs 解析器:

@Mutation('createMember')
  async createMember(@Args('input') input: MemberInput): Promise<Members> {
    console.log('input in resolver: ', input);
    return await this.membersService.addItem(input);
  }
Run Code Online (Sandbox Code Playgroud)

该服务与 REST 和查询一起使用,因此这应该是一个问题。解析器中的 console.log 永远不会出现在终端中。

从复制卷曲按钮:

curl 'http://localhost:3000/graphql' -H 'Accept-Encoding: gzip,    
deflate, br' -H 'Content-Type: application/json' -H 'Accept: 
application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: 
http://localhost:3000' --data-binary '{"query":"mutation 
createMember($input: MemberInput!) {\n  createMember (input: $input) 
{\n      first_name\n      middle_initial\n      last_name\n     
user_name\n      pitch\n      main_skill_title\n    \tskill_id_array\n      
skills_comments\n      other_skills\n      links\n      country\n      
email\n      member_status\n  }\n}"}' --compressed
Run Code Online (Sandbox Code Playgroud)

Jur*_*can 9

我有同样的问题,在变量中,我在最后一个参数的末尾有逗号。gql 给了我同样的错误。

改变这个:

{
    "input": {
        "param1": "val1",
        "param2": "val2",
    }
}
Run Code Online (Sandbox Code Playgroud)

对此:

{
    "input": {
        "param1": "val1",
        "param2": "val2" // no comma here
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 天哪,这让我发疯,而且很容易被忽视。Playground 应突出显示此语法错误。谢谢 (3认同)