我正在尝试将ValidationPipe()
和ParseIntPipe()
应用于我的NestJs控制器中的参数。
目的是仅将ParseIntPipe()
应用于@Param('id')
并将ValidationPipe()
应用于CreateDataParams
和主体DTO中的所有参数。
但是,我似乎无法按照自己的方式来应用两个管道。这是我所拥有的:
@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()
应用于参数?
答案 0 :(得分:2)
如果将ParseIntPipe
应用于id
参数,它将仅转换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
}
不过请注意,由于例如parseInt('5abc010')
是5
。因此,您可能需要对转换函数进行其他检查。