graphql-ruby:Int 不是定义的输入类型(在 $first 上)

Posted

技术标签:

【中文标题】graphql-ruby:Int 不是定义的输入类型(在 $first 上)【英文标题】:graphql-ruby: Int isn't a defined input type (on $first) 【发布时间】:2017-11-19 02:52:34 【问题描述】:

我有一个似乎无法靠自己解决的问题。

连同基本的Query、Mutation等类型我做了如下类型定义:

module Types
  UserType = GraphQL::ObjectType.define do
    name 'User'
    description 'A user'

    implements GraphQL::Relay::Node.interface
    global_id_field :id

    field :email, !types.String, 'Email address'

    connection :docs, DocType.connection_type, 'Available docs'
  end  
end

然后我尝试使用以下方式查询它:

query FileListQuery(
  $after: String
  $first: Int
) 
  viewer 
    currentUser 
      docs(first: $first, after: $after) 
        edges 
          node 
            id
            name
            __typename
          
          cursor
        
        pageInfo 
          endCursor
          hasNextPage
          hasPreviousPage
          startCursor
        
      
      id
    
    id
  

我将以下内容作为查询变量传递:


  "first": 1,
  "after": null

问题在于它通过以下方式摆脱困境:


  "errors": [
    
      "message": "Int isn't a defined input type (on $first)",
      "locations": [
        
          "line": 3,
          "column": 3
        
      ],
      "fields": [
        "query FileListQuery"
      ]
    
  ]

老实说,我不知道它为什么抱怨 Int 类型……

如果我去掉请求中有问题的$first 查询变量,它就可以正常工作。

这个:

query FileListQuery(
  $after: String
) 
  viewer 
    currentUser 
      docs(first: 10, after: $after) 
        edges 
          node 
            id
            name
            __typename
          
          cursor
        
        pageInfo 
          endCursor
          hasNextPage
          hasPreviousPage
          startCursor
        
      
      id
    
    id
  

产生这个:


  "data": 
    "viewer": 
      "currentUser": 
        "docs": 
          "edges": [
            
              "node": 
                "id": "1",
                "name": "First Doc",
                "__typename": "Doc"
              ,
              "cursor": "MQ=="
            
          ],
          "pageInfo": 
            "endCursor": "MQ==",
            "hasNextPage": false,
            "hasPreviousPage": false,
            "startCursor": "MQ=="
          
        ,
        "id": "1"
      ,
      "id": "VIEWER"
    
  

关于如何解决这个问题的任何提示和想法?我使用的是 graphql gem v1.6.3。

【问题讨论】:

您的问题解决了吗?尽管模式中定义了类型,但我收到相同的错误消息... 嘿,@nattfodd,请查看下面接受的答案。 AFAIK,该问题的修复程序已经合并,应该已经发布了。如果你仍然遇到同样的问题,我认为,重新打开问题可能是一种方法。 【参考方案1】:

目前,graphql-ruby 中似乎存在一个错误,该错误会阻止传播模式中未明确使用的类型。在 GitHub 上查看此问题:https://github.com/rmosolgo/graphql-ruby/issues/788#issuecomment-308996229

要修复错误,必须在架构中的某处包含Int 字段。原来我一个都没有。哎呀。

这为我解决了问题:

# Make sure Int is included in the schema:
field :testInt, types.Int

【讨论】:

这对我没有任何作用。

以上是关于graphql-ruby:Int 不是定义的输入类型(在 $first 上)的主要内容,如果未能解决你的问题,请参考以下文章

向 graphql-ruby 实现添加多个过滤器

检查输入的类型是不是正确

如何使用 graphql-ruby 测试 GraphQL 模式?

无法使用 graphql-ruby 订阅进行简单广播

无法理解使用带有 graphql-ruby gem 的 ActionCable 的 GraphQL 订阅

c#中定义了一个泛型,从键盘输入一个int型数字,如何接收转化为int型