Typegoose+TypeGraphQL场景下Field Resolver返回undefined问题求助
问题根因与解决方案
你遇到的问题是TypeGraphQL FieldResolver 上下文绑定 + Mongoose 文档实例结构的共性问题,按以下步骤排查即可解决:
- 禁止用箭头函数定义FieldResolver方法
箭头函数会绑定上层Resolver类的this上下文,无法指向当前返回的实体实例,属于高频踩坑点:
错误写法:
@FieldResolver() workoutAmount = () => { return this.workouts.length // this指向Resolver类实例,无workouts字段 }
正确写法:
@FieldResolver() workoutAmount() { // 此时this指向返回的实体实例 }
- 适配Mongoose文档实例的字段存储规则
Typegoose返回的是Mongoose Document实例,所有字段默认存储在实例的_doc属性下,控制台打印时会自动展开_doc的属性到外层,所以你能看到workouts字段但直接访问返回undefined,有两种解决方式:
- 直接访问
_doc下的字段:
@FieldResolver() workoutAmount() { return this._doc.workouts.length }
- 开启
simpleResolvers配置,TypeGraphQL会自动适配Mongoose文档结构:
// 在你的实体类的@ObjectType装饰器加配置 @ObjectType({ simpleResolvers: true }) export class YourEntity { // 原有字段定义 @prop() @Field(type => [Workout]) workouts: Workout[] }
- 检查Resolver装饰器配置
确保你的Resolver类装饰器指定了对应的实体类:
@Resolver(of => YourEntity) export class YourEntityResolver { // 你的Resolver逻辑 }
内容的提问来源于stack exchange,提问作者Didzis
相关产品推荐
相关产品推荐

