NestJS Resolver报错:Cannot read properties of undefined (reading 'entryUser')
错误核心分析
报错Cannot read properties of undefined (reading 'entryUser')的本质是:在Resolver的entry方法中调用this.userService.entryUser()时,this.userService实例为undefined——你能正常打印entryData说明Resolver的请求解析逻辑没问题,但Service的注入环节出了问题。
分步排查方案
检查模块注册配置
确保你的UsersModule(或对应模块)中同时注册了UsersResolver和UsersService,并且正确导入了TypeORM的依赖模块:@Module({ imports: [TypeOrmModule.forFeature([User])], // 必须导入,否则Service无法获取Repository providers: [UsersResolver, UsersService], // 两者都要在providers数组里 }) export class UsersModule {}如果Resolver和Service不在同一个模块,要确保Resolver所在模块导入了
UsersModule,并且UsersService被导出:// UsersModule中添加exports exports: [UsersService]验证Service注入状态
在Resolver的entry方法中直接打印this.userService,确认是否为undefined:@Mutation((returns) => User) entry(@Args('entryData') entryData: EntryUserInputType) { console.log("======> entryData: ", entryData); console.log("======> userService: ", this.userService); // 新增这行 return this.userService.entryUser(entryData); }如果输出为
undefined,说明Nest没有成功注入Service,回到模块配置检查。排除this指向问题
虽然你的entry方法是普通类方法(非箭头函数),理论上不会有this指向问题,但可以尝试用装饰器注入Service,替代构造函数注入:export class UsersResolver { @Inject(UsersService) private readonly userService: UsersService; // 去掉构造函数 @Mutation((returns) => User) entry(@Args('entryData') entryData: EntryUserInputType) { return this.userService.entryUser(entryData); } }检查Service初始化是否失败
如果UsersService的构造函数中注入Repository失败(比如TypeORM配置错误),会导致Service无法实例化,进而Resolver注入失败。可以在UsersService的构造函数中加日志:constructor(@InjectRepository(User) private userRepo: Repository<User>) { console.log("======> userRepo initialized: ", userRepo); }如果这行日志没输出,说明TypeORM的Repository注入有问题,检查
ormconfig.json或app.module.ts中的TypeORM配置是否正确。
额外注意点
你的UsersService.entryUser方法目前没有返回值,Resolver中return这个async方法会导致GraphQL返回null,后续需要补充返回逻辑(比如返回查询到的User实例)。
内容的提问来源于stack exchange,提问作者Nick

