Graphql javascript输入字段 - 错误

时间:2018-03-27 20:17:39

标签: graphql react-apollo

我正在构建一个Express Graphql后端来支持与Apollo前端的React。我的一个突变接受了一个我称之为Token的争论。此标记由Stripe生成,包含许多字段和包含字段的子对象。

我不需要所有这些字段来执行我的变异,但是,在创建标量输入以描述整个Token对象之前,我遇到了错误。

有解决方法吗?

是否可以设置我的突变以隔离我需要的字段而忽略其余字段?

Stripe Docs - Token Object

我的一些代码:

input Card {
        id: String
        object: String
        address_city: String
        address_country: String
        address_line1: String
        address_line1_check: String
        address_line2: String
        address_state: String
        address_zip: String
        address_zip_check: String
        brand: String
        country: String
        cvc_check: String
        dynamic_last4: String
        exp_month: Int
        exp_year: Int
        fingerprint: String
        funding: String
        last4: String
        metadata: String
        name: String
        tokenization_method: String
    }

    input Token {
        id: String
        object: String
        card: Card
        client_ip: String
        created: Int
        livemode: Boolean
        type: String
        used: Boolean
    }

也许我应该考虑为此设置一个基本的快速路由处理程序,但我想保持我的网站一致。

1 个答案:

答案 0 :(得分:1)

不幸的是,输入验证是非常严格的。两种可能的解决方案:

  1. 您可以使用字符串代替令牌类型。将JSON.stringify应用于客户端的令牌对象,然后在解析器内解析它。您还可以使用自定义JSON标量来实现相同的效果。这种方法的最大缺点是你失去了对象本身的所有验证,尽管如果这是一个由Stripe生成的对象,这可能不是一个大问题。

  2. 仅在令牌类型中包含您需要的内容,然后使用lodashramda的{​​{1}}之类的内容将您的对象缩减为您的终端所需的内容实际上接受。在客户端进行一些额外的工作,但可能不如为整个事情编写模式那么痛苦。这也意味着如果Stripe向对象添加任何属性,它将不会破坏您的API调用:)