簡體   English   中英

創建一個繼承@Body()或@Param()裝飾器的自定義NestJs Decorator?

[英]Create a custom NestJs Decorator inheriting @Body() or @Param() decorator?

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

@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())

然后代碼會比以前更清晰:

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

繼承像這樣的裝飾器的正確方法是什么?

謝謝

由於裝飾器只是普通函數,因此您只需創建一個返回被調用裝飾器的函數:

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) {
    // ... 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM