0

我的 nest.js 应用程序在DemoConsumerModule. 的代码片段DemoConsumerController

@Controller('demo-consumer')
export class DemoConsumerController {

  @EventPattern('demo-topic')
  demoTopic(
    @Payload() payload,
    // @Ctx() context: KafkaContext,
  ) {
    this.logger.debug(`payload: ${JSON.stringify(payload)}`)
  }

}

我想用中间件步骤丰富事件监听器(只是玩方法):

@Injectable()
export class LoggingMiddleware implements NestMiddleware {
  logger = new Logger(LoggingMiddleware.name);

  use(req: any, res: any, next: () => void) {
    this.logger.debug('start middleware')
    next();
    this.logger.debug('end middleware')
  }
}

要激活中间件,我必须在模块中注册一个:

@Module({
  controllers: [DemoConsumerController],
  providers: [
    DemoConsumerService,
  ]
})
export class DemoConsumerModule implements NestModule {
  private readonly logger = new Logger(DemoConsumerModule.name);
  configure(consumer: MiddlewareConsumer) {
    this.logger.debug('configuring middleware')
    consumer.apply(LoggingMiddleware)
      .forRoutes({
        path: 'demo-consumer',
        method: RequestMethod.ALL
      },{
        path: 'demo-consumer/demo-topic',
        method: RequestMethod.ALL
      },{
        path: 'demo-topic',
        method: RequestMethod.ALL
      })
  }

}

问题

问题是我的中间件不起作用。可能的问题很少。forRoutes如果跳过配置,则无法激活中间件。forRoutes消耗http配置,rpc所以我不确定是否可以针对可能的情况正确配置它。

附言

详细信息@EventPattern('demo-topic')

  • 运输Transport.KAFKA
  • "contextType":"rpc";
4

0 回答 0