You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS Resolver报错:Cannot read properties of undefined (reading 'entryUser')

排查NestJS GraphQL Mutation报错: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:51:14