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 文件?

如何从 Apollo Server 端点获得完整的 GraphQL 架构?

res.session 未定义 graphql apollo-server-express