GraphQL Apollo Server,如何使字段将空字符串注册为空
Posted
技术标签:
【中文标题】GraphQL Apollo Server,如何使字段将空字符串注册为空【英文标题】:GraphQL Apollo Server, how to make a field register an empty string as null 【发布时间】:2020-05-10 17:29:49 【问题描述】:我有一个可以为空的字段“语言”,它实际上永远不会为空。它可以是语言环境代码,也可以是空字符串 ''。这会导致我的客户端出现问题,该客户端需要语言环境代码或根本不需要。
虽然我可以在我的客户端中捕获此问题,或在我的数据库中阻止此问题,但我更愿意在我的 GQL 服务器中处理此问题。
我能想到的一个解决方案是检查我在数据源中收到的数据,并在必要时进行变异。但是我担心这可能会损害性能,因为这是一个非常关键的查询,我不想每次有人访问我网站上的任何页面时都使用此检查。
【问题讨论】:
使用 db 工具/控制台修复数据库条目 这是一个临时解决方案。我也想捕捉这样不正确的数据库条目,并相应地处理它们。 更新 API 以不接受空字符串? 这就是这个问题的目的,我的 GQL 服务器直接在数据库上。 【参考方案1】:您将为相关字段提供自定义解析器:
const resolvers =
SomeType:
language (parent) =>
return parent.language || null
【讨论】:
非常干净的解决方案。我应该已经意识到解析器对此有多么容易。到目前为止,我不知道空字符串在布尔表达式中返回 false,所以知道这一点也很好。谢谢! 仅屏蔽问题 ;)【参考方案2】:Custom scalars and enums 可用于进行一些自定义,例如验证或自动更正转换提供的数据(""
到 null
)。
Keystone.JS 有一个很好的钩子系统。
【讨论】:
以上是关于GraphQL Apollo Server,如何使字段将空字符串注册为空的主要内容,如果未能解决你的问题,请参考以下文章
无服务器框架 + AWS + Lambda + DynamoDB + GraphQL + Apollo Server = 无法使 POST 请求工作
如何使“apollo 服务器”与 graphql schemaObject 一起使用?
如何使用 Apollo/GraphQL 使派生状态保持最新?
使用 Apollo Server 时如何生成 schema.graphql 文件?