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 decorator
Reflect.getMetadata('version',target,propertyKey.value')提供未定义的。有什么修正吗?我在做了一些修改后就可以让它工作了。它们如下:-使用
Reflect.metadata
而不是
SetMetadata
-将Get return type更改为
MethodDecorator
-使用
propertyKey
而不是
propertyKey.value
所有其他方法似乎都有效。谢谢一旦你做出这些改变,我可以接受答案。