【问题标题】:Graphql javascript input fields - errorsGraphql javascript输入字段 - 错误
【发布时间】:2018-09-06 09:14:21
【问题描述】:

我正在构建一个 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
    }

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

【问题讨论】:

    标签: graphql react-apollo


    【解决方案1】:

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

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

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

    【讨论】:

    • 酷两者看起来都是很棒的想法。不过有一件事我不确定。因为这是我第一次玩 Stripe……他们是否要求令牌“原样”?基本上排除了pick 的情况。 Stripe 中的测试模式已设置,因此我无法对此进行测试,但 stringify 方法似乎很可靠 - 我主要担心的是,如果 Stripe 对其令牌进行小幅更改,我的 graqhql 会崩溃。
    • 是的,我想如果你将整个令牌传递回 Stripe,我会选择解决方案 #1 :)
    猜你喜欢
    • 2020-01-09
    • 2018-01-30
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多