如何将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
到id
PARAM,它只会改变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