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

Posted

技术标签:

【中文标题】无法解决 Playground 错误:未提供所需类型 \\"MemberInput!\\" 的变量 \\"$input\\"【英文标题】:Can't solve Playground error: Variable \"$input\" of required type \"MemberInput!\" was not provided无法解决 Playground 错误:未提供所需类型 \"MemberInput!\" 的变量 \"$input\" 【发布时间】:2019-11-13 10:55:59 【问题描述】:

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

我在 Playground 中的突变:

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

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


  "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

【问题讨论】:

这是一个请求验证错误,它的意思正是它所说的,变量$input 丢失了。您可以通过在浏览器的开发工具中打开网络选项卡并检查 Playground 向您的服务器发出的请求来仔细检查变量是否正在发送。如果您看到此错误,我可以保证请求正文中没有 input 变量。 听起来不像是个混蛋,但您确定您将变量放在正确的文本字段中吗?我可以在“VARIABLES”和“HTTP HEADERS”之间切换,我所在选项卡的唯一指示是它的颜色是略浅的灰色。我以前把它们混在一起了。 @DanielRearden 是的。当我单击标题时,什么都没有。当我点击变量时,有我的 JSON。变量突出显示。有趣的是,如果 JSON 在任何一个中,我都会收到相同的消息。我不明白。 可能是 Playground 本身的一些奇怪错误。一时兴起,您可以点击COPY CURL 按钮并使用生成的命令编辑您的问题吗? @DanielRearden 我添加了它。希望您了解该输出。为简单起见,我在帖子中简要介绍了我的突变和输入。这显示了完整的对象。当我编辑掉大部分对象时,两者都有相同的错误。我已经删除了简要测试。 【参考方案1】:

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

改变这个:


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

到这里:


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

【讨论】:

是的,这是一个古老的 JSON 问题。找到可能会令人沮丧。 天哪,这让我发疯了,而且很容易被忽视。 Playground 应突出显示此语法错误。谢谢【参考方案2】:

解释起来有点复杂,但我们可能都去过那里。我正在尝试不同的“解决方案”,其中一个的遗骸意外地留在了我的 JSON 数据对象中。完整的对象比我上面的简短对象具有更多的属性。 JSON 中的数组不应该是“[]”。昨晚我感到疲倦和绝望。我将解析器更改为我在上面发布的内容,但它没有解决问题,因为 JSON 中的实验导致了与以前相同的错误。所以我找错地方了。一旦我注意到并删除了引号,我的完整对象数据就会发布到 Postgres db。

上面的代码有效。

如果有更具体的 GraphQL 错误就好了。我怀疑这个很笼统,但这没有帮助。它并不表示最初的问题出在解析器中,后来我遇到了数据输入错误。

【讨论】:

以上是关于无法解决 Playground 错误:未提供所需类型 \"MemberInput!\" 的变量 \"$input\"的主要内容,如果未能解决你的问题,请参考以下文章

尽管有效,但未提供所需类型的变量

Swift Playground 未显示错误

错误: 无法找到目标文件分割所需的 strip 二进制文件。

您指定的网页无法访问! 错误类型:403

离开页面时,我得到:未处理的 GraphQL 订阅错误错误:GraphQL 错误:未提供所需类型 xxx 的变量 xx

HTTP 400 - 错误请求