GraphQL:返回具有不可为空 id 字段的类型作为查询结果
Posted
技术标签:
【中文标题】GraphQL:返回具有不可为空 id 字段的类型作为查询结果【英文标题】:GraphQL: Return a type with non-nullable id field as a query result 【发布时间】:2018-12-19 14:13:37 【问题描述】:我有这种类型:
type Profile
id: ID! @isUnique
email: String! @isUnique
...
还有一个查询:
profile(email: String!):Profile
当我使用不存在的用户运行查询时,我的底层解析器返回 null,我希望 GraphQL 会喜欢这个。
但是,我得到了这个错误:
Cannot return null for non-nullable field Profile.id.
发生这种情况是因为查询应该返回 Profile
并且 Profile
必须有 id
字段。
但是,查询的返回类型不是不可为空的Profile!
,而是Profile
,这意味着查询可能什么也不返回。
如何正确解决这个问题?
【问题讨论】:
您能否更新您的问题以包含来自 GraphQL 的完整响应,而不仅仅是错误? 我也有同样的问题,这里有我的完整回复justpaste.it/4pqlr 【参考方案1】:尝试在您的个人资料查询解析器中返回 null
。如果您返回类似空对象的内容,Profile 解析器将拾取该对象并尝试将 undefined
返回为 Profile.id
,正如您所指出的那样,这是一个架构错误。
试试这样的:
const queryProfileResolver = (_, email ) =>
// getProfileByEmail should return null if no match is found
return getProfileByEmail(email)
您的 graphQL 响应将如下所示
data:
profile: null
【讨论】:
同样的问题,没有解决办法:(【参考方案2】:首先你需要删除你的数据库并使用
types.graphql
原样
type Profile
id: ID! @isUnique
email: String! @isUnique
...
部署它,错误就会消失。
发生这种情况的主要原因是您已经部署了不为空的数据,因此无法更改您需要删除我们的数据库,就是这样
【讨论】:
以上是关于GraphQL:返回具有不可为空 id 字段的类型作为查询结果的主要内容,如果未能解决你的问题,请参考以下文章
Schema graphql 错误给出“不能为不可为空的字段 Organisation.id 返回 null”为啥?
GraphQL 查询返回错误“不能为不可为空的字段返回 null”
使用 Graphql 在 NestJS 上订阅时,“不能为不可为空的字段返回 null”
Apollo GraphQL“不能为不可为空的字段 Mutation.createUser 返回 null”
错误:使用 Graphql 在 Spring Boot 中不可为空的类型是“ID”
GraphQL SDL(aws appsync)中的“不能为不可为空的类型返回 null:父“消息”(/getMessages/sendBy)中的“人”