Tengo algunos decoradores que, cuando los llamo, quiero configurar Metadata para usarlos en mi registro. En mi controlador, tengo estos:
@Post("somePath") @Permission("somePermission") @UseGuards(JwtAuthGuard) @HttpCode(200) @Grafana( "endpoint", "functionalmap" ) async getSubscriptionFromPwebFormFilter( @Body(ValidationPipe) someDto: someDtoType ): Promise<ISuccessResponse> { // some logic }En mis decoradores, quiero configurar algunos datos en los metadatos para usar en mi interceptor de registro,
Decorador Grafana:
export const Grafana = (functionalMap: string, endpoint: string) => applyDecorators( SetMetadata("endpoint", endpoint), SetMetadata("functionalMap", functionalMap) );Decorador de AuthGuard:
@Injectable() export class JwtAuthGuard extends AuthGuard("jwt") { constructor( private readonly reflector: Reflector, private readonly someService: SomeService ) { super(); } public async canActivate(context: ExecutionContext): Promise<boolean> { const role = this.reflector.get<string>("permission", context.getHandler()); const request = context.switchToHttp().getRequest(); const { valueToLog } = request.body; const jwtToken = request.headers.authorization; console.log("check value exist", valueToLog); SetMetadata("valueToLog", valueToLog); }Ahora, en mi interceptor de registro, obtengo todos los valores de los metadatos de esta manera:
@Injectable() export default class LoggingInterceptor { constructor(private readonly reflector: Reflector) {} intercept(context: ExecutionContext, next: CallHandler) { const executionStart = Date.now(); return next.handle().pipe( tap((responseData) => { const response = context.switchToHttp().getResponse<ServerResponse>(); const { statusCode } = response; const valueToLog = this.reflector.get( "valueToLog", context.getHandler() ); // this is undefined const endpoint = this.reflector.get("endpoint", context.getHandler()); // this have value const functionalMap = this.reflector.get( "functionalMap", context.getHandler() ); // this have value ... // some logic }) ); } }En mi caso, el valor de punto final y mapa funcional se puede recuperar del reflector, sin embargo, valueToLog aparece como indefinido,
¿La configuración de metadatos no funciona para el decorador de protección de autenticación?