创建继承自@Body()或@Param()装饰器的自定义NestJs装饰器?

时间:2019-06-23 18:51:30

标签: typescript nestjs

我使用的是NestJs,在许多控制器中,我使用的是:

if ($value = @{try {Get-ItemPropertyValue "Registry::$nameKey" -name:AdskProductCode}catch{}}) {

我想通过创建自定义装饰器来清理代码,例如:

@Post(":id")
public create(
    @Param('id', new ParseIntPipe()) id: number, 
    @Body(new ValidationPipe({transform: true})) myData: MyClass) {
        // ... 
    }

@Bind() => @Body(new ValidationPipe({transform: true}))

然后该代码将比以前更简洁:

@Id() => @Param('id', new ParseIntPipe())

继承这样的装饰器的正确方法是什么?

谢谢

1 个答案:

答案 0 :(得分:2)

由于装饰器只是简单的函数,因此您可以简单地创建一个返回被调用的装饰器的函数:

decorators.ts

import { Body, Param, ParseIntPipe, ValidationPipe } from '@nestjs/common';

export const Bind = () => Body(
  new ValidationPipe({transform: true}),
);

export const Id = () => Param('id', new ParseIntPipe());

然后将它们用作装饰器:

import { Id, Bind } from './decorators';

// ... 

@Post(":id")
public create(@Id() id: number, @Bind() myData: MyClass) {
    // ... 
}