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

时间:2019-07-02 18:46:30

标签: graphql nestjs

我在这个问题上打了一个星期,似乎没有什么可以解决的。没有返回数据对象,甚至没有返回“ null”。我正在从正常工作的REST CRUD应用程序转换为GraphQL。没我想的那么容易。

我在Playground中的变异:

mutation createMember($input: MemberInput!) {
    createMember (input: $input) {
          first_name
          last_name
          user_name
    }
}

下面的操场查询变量:(不在标题部分。)

{
  "input": {
    "first_name": "John",
    "last_name": "Creston",
    "user_name": "jc"
    }
}

模式:(查询工作正常,成员类型(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
}

我没有看到解析器可能是此错误消息的问题,但我将添加Nestjs解析器:

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

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

通过“复制CURL”按钮:

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

2 个答案:

答案 0 :(得分:1)

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

更改此项:

{
    "input": {
        "param1": "val1",
        "param2": "val2",
    }
}

对此:

{
    "input": {
        "param1": "val1",
        "param2": "val2" // no comma here
    }
}

答案 1 :(得分:0)

解释起来有点复杂,但我们可能都已经存在了。我正在尝试不同的“解决方案”,而其中一个的剩余部分意外地留在了JSON数据对象中。完整的对象比上面的简短内容具有更多的属性。数组在JSON中不应为“ []”。昨晚我感到疲惫和绝望。我将解析器更改为上面发布的解析器,但由于JSON中的实验引起了与以前相同的错误,因此无法解决问题。所以我看错地方了。一旦注意到并删除了引号,我的完整对象的数据就会发布到Postgres数据库中。

上面的代码有效。

如果有更多特定的GraphQL错误,那就很好了。我怀疑这是一个很笼统的方法,但是没有帮助。但这并不表示最初的问题出在解析器中,后来没有出现数据输入错误。