如何将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()参数?
回答:
如果应用ParseIntPipe到idPARAM,它只会改变id,但没有财产id的params,在这里它会留一个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

