¿Cómo puedo cambiar el nombre de la plantilla que se pasa al decorador @Render en el Interceptor? Necesito agregar la configuración regional deseada a la URL de la plantilla, según el idioma del usuario. Estoy tratando de hacer esto, pero no funciona. ¿Cómo puedo hacer esto?
@Injectable() export class RenderByLanguageInterceptor implements NestInterceptor { constructor(private reflector: Reflector) {} intercept(context: ExecutionContext, next: CallHandler): Observable<any> { const template = this.reflector.getAllAndOverride<string>(RENDER_METADATA, [ context.getHandler(), context.getClass(), ]); const lang = context.switchToHttp().getRequest().i18nLang; SetMetadata(RENDER_METADATA, `${lang}/${template}`); return next.handle(); } }SetMetadata es un decorador de la biblioteca de Nest como función auxiliar. Lo que debe hacer es usar la API Reflect y hacer algo similar a
Reflect.defineMetadata( RENDER_METADATA, `${lang}/${tempalte}`, context.getClass(), context.getHandler() ); Donde Reflect es de reflect-metadata . Esto debería establecer los metadatos adecuadamente, para que se puedan leer más tarde. Con este enfoque, deberá asegurarse de que los metadatos estén configurados cada vez, ya que no se puede recurrir a los metadatos originales en el decorador @Render() .