我使用的是 NestJs,并且在我的许多控制器中我都在使用:
@Post(":id")
public create(
@Param('id', new ParseIntPipe()) id: number,
@Body(new ValidationPipe({transform: true})) myData: MyClass) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想通过创建自定义装饰器来清理我的代码,例如:
@Bind() => @Body(new ValidationPipe({transform: true}))
Run Code Online (Sandbox Code Playgroud)
或者
@Id() => @Param('id', new ParseIntPipe())
Run Code Online (Sandbox Code Playgroud)
那么代码会比以前更干净:
@Post(":id")
public create(@Id() id: number, @Bind() myData: MyClass) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
像这样继承这些装饰器的正确方法是什么?
谢谢
小智 6
由于装饰器只是普通函数,您可以简单地创建一个返回被调用装饰器的函数:
装饰器.ts
import { Body, Param, ParseIntPipe, ValidationPipe } from '@nestjs/common';
export const Bind = () => Body(
new ValidationPipe({transform: true}),
);
export const Id = () => Param('id', new ParseIntPipe());
Run Code Online (Sandbox Code Playgroud)
然后将它们用作装饰器:
import { Id, Bind } from './decorators';
// ...
@Post(":id")
public create(@Id() id: number, @Bind() myData: MyClass) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |