Typescript NestJS:如何自动记录@MessagePattern';是用另一个装饰器输入数据吗?

Typescript NestJS:如何自动记录@MessagePattern';是用另一个装饰器输入数据吗?,typescript,decorator,nestjs,Typescript,Decorator,Nestjs,我有一个控制器,外部微服务使用ClientProxy.send()方法调用它,它发送一个由附带的@MessagePattern decorator识别的命令,并执行该控制器函数: @Controller() export class DataController { @CustomLogger() @MessagePattern({ cmd: 'storeData' }) storeData( owner: string, dataType: string, )

我有一个控制器,外部微服务使用ClientProxy.send()方法调用它,它发送一个由附带的@MessagePattern decorator识别的命令,并执行该控制器函数:

@Controller()
export class DataController {

  @CustomLogger()
  @MessagePattern({ cmd: 'storeData' })
  storeData(
    owner: string,
    dataType: string,
  ): void {

  }
}
现在,每次调用这个控制器时,我都要准确地记录调用了哪个命令。
我可以简单地在storeData()函数中硬编码Logger.log('storeData')并为下一个函数执行该操作,但是是否可以使用另一个装饰器自动记录@MessagePattern()的输入,例如使用我自己定义的@CustomLogger?如果是这样,怎么做?

可以将decorator与
applyDecorators()结合起来

在您的情况下,您可以创建一个
LogMessage
装饰器,如下所示:

//LogMessage.ts
const LogMessage=(cmd:string)=>{
常量记录器=新记录器('MessageLogger');
return(target:any,propertyKey:string,descriptor:PropertyDescriptor)=>{
const targetFunc=descriptor.value;
descriptor.value=函数(…参数:任意[]){
log(`Message:${cmd}`);
targetFunc.apply(此参数为args);
};
返回描述符;
};
};
导出默认日志消息;
并将其与MessagePattern结合在一个新的装饰器中
MessagePatternWithLog

//MessagePatternWithLog.ts
const MessagePatternWithLog=({cmd:string})=>{
返回applydcorators(LogMessage(cmd),MessagePattern({cmd}));
};
导出默认MessagePatternWithLog;
之后,您可以像其他装饰师一样使用它:

@Controller()
导出类数据控制器{
@MessagePatternWithLog({cmd:'storeData'})
存储数据(
所有者:字符串,
数据类型:string,
):无效{
}
}
此代码未经测试,但源自一个工作示例