调用GraphQL接口时出现‘Cannot return null for non-nullable field Task.id’错误
问题解决:Cannot return null for non-nullable field Task.id
核心问题
你的GraphQL查询解析器返回类型定义错误:@Query(() => Task) 声明返回单个Task对象,但实际代码返回的是Task[]数组类型,导致GraphQL无法正确匹配字段,进而抛出非空字段id为null的错误。
修复方案
修改解析器的@Query装饰器,将返回类型改为数组:
@Query(() => [Task]) // 改为数组类型 async tasks(@Args() findManyTaskArgs: FindManyTaskArgs): Promise<Task[]> { return this.taskService.findMany(findManyTaskArgs.where); }
原因解释
- 你的查询
tasks请求的是任务列表,期望返回数组类型 - 原解析器声明返回单个
Task,GraphQL会尝试从返回的数组中读取单个对象的id字段,无法匹配后触发非空校验错误 - 其他接口正常是因为它们的返回类型和实际返回值匹配,不存在类型不兼容问题
额外验证(可选)
如果修改后仍有问题,可以检查:
- 数据库中匹配
userId的任务记录是否确实存在非空的id字段 - Prisma客户端的
Task模型是否正确映射数据库表字段,确保id为非空字段
内容的提问来源于stack exchange,提问作者Brayden
相关产品推荐
相关产品推荐

