Nix*_*xel 2 javascript node.js nestjs
我正在使用 a@SetMetaData('version', 'v2')为控制器中的 http 方法设置版本控制。然后我有一个自定义@Get()装饰器将版本作为后缀添加到控制器路由中。
/api/cats/v2/firstfive这样,当我有时,我就可以使用
@SetMetaData('version', 'v2')
@Get('firstfive')
Run Code Online (Sandbox Code Playgroud)
但我没有看到将 Reflector 注入到我的自定义 @Get 装饰器中的明确方法。
我的 Get 装饰器如下,
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));
}
Run Code Online (Sandbox Code Playgroud)
请帮帮我!谢谢!
在装饰器中,您无法获取类属性,或进行任何类型的注入,因此您将无法获取this.reflector或类似的内容。你可以做的是设置你自己的装饰器来模仿@Get()和使用这些Reflect.getOwnMetadata()方法,然后返回“@Get()”装饰器。可能有点乱,但大致上是这样的
export function Get(path: string): MethodDecorator {
return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
const version = Reflect.getMetadata('version', target, propertyKey);
Reflect.defineMetadata(PATH_METADATA, version + path, descriptor.value);
Reflect.defineMetadata(METHOD_METADATA, RequestMethod.GET, descriptor.value);
return descriptor;
}
}
Run Code Online (Sandbox Code Playgroud)
其中PATH_METHOD和METHOD_METADATA是从 导入的@nestjs/common/constants,并且RequestMethod是从 导入的@nestjs/common/enums。@Get()这将为您创建一个与您的方法协同工作的新装饰器@SetMetadata()。如果我没记错的话,装饰器是自下而上运行的,所以请确保@SetVersion()在@Get()
| 归档时间: |
|
| 查看次数: |
13670 次 |
| 最近记录: |