在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
相关产品推荐
相关产品推荐

