GraphQL 参数的值无效。预期类型'Int

Posted

技术标签:

【中文标题】GraphQL 参数的值无效。预期类型\'Int【英文标题】:GraphQL Argument has an invalid value. Expected type 'IntGraphQL 参数的值无效。预期类型'Int 【发布时间】:2019-05-18 03:04:32 【问题描述】:

我正在使用 Rails 中的一个非常基本的 GraphQL API。

我有一个模型“Gin”,我可以在其中返回数据库中的少数记录,但是当尝试通过突变添加 gin 时,我遇到了字段类型的问题:

mutation 
  createGin(name: "Plymouth", 
description: "Gin made in Plymouth", 
abv: "40", 
url: "http://www.plymouthgin.com",) 
    id
    name
    description
    abv
    url
  

给出以下错误:

"message": "字段 'createGin' 上的参数 'abv' 具有无效值。 预期类型 'Int'。",

db 中的abv 字段是整数。

gin_type.rb

Types::GinType = GraphQL::ObjectType.define do
  name 'Gin'

  field :id, !types.ID
  field :name, !types.String
  field :description, !types.String
  field :abv, !types.Int
  field :url, !types.String
end

create_gin.rb

class Resolvers::CreateGin < GraphQL::Function

  argument :name, !types.String
  argument :description, !types.String
  argument :abv, !types.Int
  argument :url, !types.String

  type Types::GinType

  def call(_obj, args, _ctx)
    Gin.create!(
      name: args[:name],
      description: args[:description],
      abv: args[:abv],
      url: args[:ur],
    )
  end
end

我在其他地方错过了什么吗?

更新 如果我更改突变以从 40 左右删除 ",即作为整数而不是字符串,我会收到以下错误消息:


  "data": 
    "createGin": null
  ,
  "errors": [
    
      "message": "Cannot return null for non-nullable field Gin.url"
    
  ]

【问题讨论】:

我不是 Ruby 开发人员,但在 NodeJS 中发生了类似的事情,为了解决这个问题,我在解析器函数中将值解析为 Integer,当给出值时 从输入类型定义中,参数abv 需要Integer 类型的值(在create_gin.rb 中定义),但在您的突变示例中,abv 给出了一个Stringabv: "40")类型的值,应该是abv: 40 感谢@MrYoshiji 我已经尝试过他的,但请在 OP 中查看我的更新 【参考方案1】:

试试这个突变:

mutation 
  createGin(name: "Plymouth", 
description: "Gin made in Plymouth", 
abv: 40, 
url: "http://www.plymouthgin.com",) 
    id
    name
    description
    abv
    url
 

错误信息是正确的。您将 abv 参数作为字符串提供。

编辑:

在您的create_gin.rb 中,您有错字

url: args[:ur],

每当您偶然发现错误消息时,首先要假设它是正确的。

【讨论】:

如果我这样做,我会收到一个新错误,抱怨 url 为空。我已经更新了 OP。

以上是关于GraphQL 参数的值无效。预期类型'Int的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 文本类型无效参数

更新公司时,参数“输入”的值 id 无效

无法转换“Foo!”类型的值到预期的参数类型'Foo!'

无法转换类型“(_)-> Void?”的值到预期的参数类型'(() - > Void)?

无法将类型“()”的值转换为预期的参数类型“字符串”

无法将“字符串”类型的值转换为预期的参数类型 [任何]