Typescript NestJS:如何自动记录@MessagePattern';是用另一个装饰器输入数据吗?
我有一个控制器,外部微服务使用ClientProxy.send()方法调用它,它发送一个由附带的@MessagePattern decorator识别的命令,并执行该控制器函数: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, )
@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,
):无效{
}
}
此代码未经测试,但源自一个工作示例