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

在nestjs-telegraf中使用自定义中间件时Prisma注入未定义错误排查

问题解决:Telegraf中间件中Prisma服务访问报错

问题根源

当你直接把logger.use加入middlewares数组时,方法的上下文this会丢失。Telegraf调用中间件时不会自动绑定原类实例的上下文,导致执行this.prisma时this为undefined,进而抛出报错。

修复方案

有两种可靠的修复方式:

方式一:绑定方法上下文

在useFactory中,将logger.use方法绑定到logger实例上,确保执行时this指向正确的类实例:

useFactory: (configService: ConfigService, logger: LoggerMiddleware) => {    
  return {
    token: configService.get<string>("TELEGRAM_TOKEN")!,
    middlewares: [sessionMiddleware, logger.use.bind(logger)]
  };
},

方式二:用箭头函数包裹

通过箭头函数包裹中间件调用,箭头函数会继承外层作用域的上下文,确保this指向logger实例:

useFactory: (configService: ConfigService, logger: LoggerMiddleware) => {    
  return {
    token: configService.get<string>("TELEGRAM_TOKEN")!,
    middlewares: [sessionMiddleware, (ctx, next) => logger.use(ctx, next)]
  };
},

额外优化建议

如果你的PrismaModule已经导出了PrismaService,LoggerModule的providers中无需重复声明PrismaService,可以简化为:

@Module({
  imports: [PrismaModule],
  providers: [LoggerMiddleware],
  exports: [LoggerMiddleware]
})
export class LoggerModule {}

内容的提问来源于stack exchange,提问作者Volodymyr Zh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:06:01