Javascript 如何在自定义装饰器中使用NestJS Reflector?
我正在使用Javascript 如何在自定义装饰器中使用NestJS Reflector?,javascript,node.js,nestjs,Javascript,Node.js,Nestjs,我正在使用@SetMetaData('version','v2')为控制器中的http方法设置版本控制。 然后我有一个自定义的@Get()装饰器,将版本作为后缀添加到控制器路由中 这样,我就可以使用/api/cats/v2/firstfive @SetMetaData('version', 'v2') @Get('firstfive') 但我没有找到一个清晰的方法将反射器注入我的定制@Get decorator 我的装修师如下所示 import { Get as _Get } from '@n
@SetMetaData('version','v2')
为控制器中的http方法设置版本控制。
然后我有一个自定义的@Get()
装饰器,将版本作为后缀添加到控制器路由中
这样,我就可以使用/api/cats/v2/firstfive
@SetMetaData('version', 'v2')
@Get('firstfive')
但我没有找到一个清晰的方法将反射器注入我的定制@Get decorator
我的装修师如下所示
import { Get as _Get } from '@nestjs/common';
export function Get(path?: string) {
version = /*this.reflector.get('version') or something similar */
return applyDecorators(_Get(version+path));
}
请帮帮我!
谢谢 在decorators中,您无法获取类属性或进行任何类型的注入,因此您无法获取
this.reflector
或类似的内容。您可以设置自己的decorator,它模仿@Get()
并使用Reflect.getownmatadata()
方法,然后返回“`@Get()` decorator”。可能有点凌乱,但有点像
导出函数Get(路径:string):MethodDecorator{
return(target:any,propertyKey:string,descriptor:PropertyDescriptor)=>{
const version=Reflect.getMetadata('version',target,propertyKey);
Reflect.defineMetadata(路径\元数据,版本+路径,描述符.value);
Reflect.defineMetadata(方法\元数据,RequestMethod.GET,descriptor.value);
返回描述符;
}
}
其中,
PATH\u METHOD
和METHOD\u METADATA
从@nestjs/common/constants
导入,RequestMethod
从@nestjs/common/enums
导入。这将为您创建一个新的@Get()
装饰器,它与@SetMetadata()
方法协同工作。如果我没记错的话,修饰符是自下而上运行的,那么请确保@SetVersion()
在@Get()
我已经在调试的任一侧添加了@SetMetadata(),但在上面的@Get decoratorReflect.getMetadata('version',target,propertyKey.value')代码>提供未定义的。有什么修正吗?我在做了一些修改后就可以让它工作了。它们如下:-使用Reflect.metadata
而不是SetMetadata
-将Get return type更改为MethodDecorator
-使用propertyKey
而不是propertyKey.value
所有其他方法似乎都有效。谢谢一旦你做出这些改变,我可以接受答案。