Apollo GraphQL查询Task时非空字段返回null问题求助
问题原因及解决方案
核心错误点
你的getTaskByTitle查询Resolver中使用了TaskModel.find()方法,这个方法返回的是文档数组,但Resolver声明的返回类型是单个Task对象。当GraphQL尝试从数组中读取title字段时,无法获取到对应值,返回null,而title在模型里被标记为非空字段,因此触发Cannot return null for non-nullable field Task.title.错误。
修复步骤
将Resolver中的find替换为findOne,让其返回单个Task对象,与声明的返回类型匹配:
@Query(() => Task, { nullable: true}) async getTaskByTitle(@Arg('title') title: string) { // 替换find为findOne return await TaskModel.findOne({ title: title }).exec() }
额外说明
- 如果业务需要根据title返回多个Task,需将Resolver的返回类型改为
[Task],同时调整查询语句结构:
对应查询语句:@Query(() => [Task], { nullable: true}) async getTasksByTitle(@Arg('title') title: string) { return await TaskModel.find({ title: title }).exec() }query GetTasksByTitle($title: String!) { getTasksByTitle(title: $title) { createdAt updatedAt title } } - 按ID查询正常是因为
findById本身返回单个文档,与Resolver声明的返回类型匹配。
内容的提问来源于stack exchange,提问作者Shooting Stars
相关产品推荐
相关产品推荐

