我正在构建一个Express Graphql后端来支持与Apollo前端的React。我的一个突变接受了一个我称之为Token的争论。此标记由Stripe生成,包含许多字段和包含字段的子对象。
我不需要所有这些字段来执行我的变异,但是,在创建标量输入以描述整个Token对象之前,我遇到了错误。
有解决方法吗?
是否可以设置我的突变以隔离我需要的字段而忽略其余字段?
我的一些代码:
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
}
也许我应该考虑为此设置一个基本的快速路由处理程序,但我想保持我的网站一致。
答案 0 :(得分:1)
不幸的是,输入验证是非常严格的。两种可能的解决方案:
您可以使用字符串代替令牌类型。将JSON.stringify
应用于客户端的令牌对象,然后在解析器内解析它。您还可以使用自定义JSON标量来实现相同的效果。这种方法的最大缺点是你失去了对象本身的所有验证,尽管如果这是一个由Stripe生成的对象,这可能不是一个大问题。
仅在令牌类型中包含您需要的内容,然后使用lodash
或ramda
的{{1}}之类的内容将您的对象缩减为您的终端所需的内容实际上接受。在客户端进行一些额外的工作,但可能不如为整个事情编写模式那么痛苦。这也意味着如果Stripe向对象添加任何属性,它将不会破坏您的API调用:)