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

NestJS CQRS注入的Service为undefined,调用方法报错是什么原因?

问题原因及排查方案

  • 检查UpdateSensorsProductsCommandHandler是否被注册为SystemCqrsModule的provider。如果未将CommandHandler加入模块的providers数组,Nest依赖注入容器不会自动处理它的构造函数参数,会导致注入的Service为undefined。
    修正示例:
    @Module({
      imports: [
        CqrsModule,
        SensorProductsListModule,
      ],
      providers: [UpdateSensorsProductsCommandHandler], // 必须添加对应的CommandHandler到providers
      exports: [CqrsModule],
    })
    export class SystemCqrsModule {}
    
  • 检查SensorProductsListService类是否添加了@Injectable()装饰器。漏加该装饰器时Nest无法识别其为可注入的服务,注入时会返回undefined。
  • 检查如果需要在其他模块使用该CommandHandler,是否将UpdateSensorsProductsCommandHandler加入了SystemCqrsModule的exports数组。仅导出CqrsModule无法让外部模块获取到CommandHandler的正确实例,依赖注入会失败。
  • 检查是否存在手动实例化UpdateSensorsProductsCommandHandler的代码。如果是通过new UpdateSensorsProductsCommandHandler()手动创建实例,而非由Nest DI容器托管创建,构造函数的参数不会被自动注入,自然service属性为undefined。
  • 检查是否存在循环依赖。如果SensorProductsListModule反过来依赖SystemCqrsModule,或者服务之间存在循环引用,会导致依赖注入时序异常,注入的实例为undefined。可通过forwardRef处理循环依赖:
    constructor(
      private eventBus: EventBus,
      @Inject(forwardRef(() => SensorProductsListService))
      private sensorProductListService: SensorProductsListService,
    ) {}
    

内容的提问来源于stack exchange,提问作者moahammad daneshjoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:06:01