如何将ValidationPipe()和ParseIntPipe()应用于参数?

我正在尝试在NestJs控制器中同时应用ValidationPipe()ParseIntPipe()参数。

目的是ParseIntPipe()仅适用于Body

DTO中的所有参数,@Param('id')ValidationPipe()所有参数均适用CreateDataParams

但是,我似乎无法按照我想要的方式来应用两个管道。这是我所拥有的:

@Post(':id')

@UsePipes(new ValidationPipe())

async create(

@Param('id', new ParseIntPipe()) id: number, //this doesn't work

@Param() params: CreateDataParams,

@Body() createDto: CreateDto

) {

// params.id

}

我试图让另一个@Param('id')人使用该ParseIntPipe()变压器,但这不起作用。

我怎样才能同时应用ValidationPipe()和应用ParseIntPipe()参数?

回答:

如果应用ParseIntPipeidPARAM,它只会改变id,但没有财产idparams,在这里它会留一个string

相反,您可以使用class-transformer将参数转换为number

import { Transform } from 'class-transformer';

export class CreateDataParams {

@Transform(id => parseInt(id), {toClassOnly: true})

id: number;

}

然后将ValidationPipe搭配使用选项transform: true

@Post(':id')

@UsePipes(new ValidationPipe({transform: true}))

async create(

@Param() params: CreateDataParams,

@Body() createDto: CreateDto

) {

// params.id

}

不过请注意,这是不安全的,因为eg parseInt('5abc010')5。因此,您可能需要对转换功能进行其他检查。

以上是 如何将ValidationPipe()和ParseIntPipe()应用于参数? 的全部内容, 来源链接: utcz.com/qa/421978.html

回到顶部