我的 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"
;