Car*_*ven 8 javascript validation node.js typescript nestjs
我正在尝试将ValidationPipe()和ParseIntPipe()应用于我的 NestJs 控制器中的参数。
目的是ParseIntPipe()仅适用于@Param('id')但ValidationPipe()适用于CreateDataParams和 Body 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
}
Run Code Online (Sandbox Code Playgroud)
我试过让另一个@Param('id')应用ParseIntPipe()变压器,但这不起作用。
我怎样才能同时应用ValidationPipe()和ParseIntPipe()参数?
Kim*_*ern 13
如果应用ParseIntPipe到idPARAM,它只会改变id,但没有财产id的params,在这里它会留一个string。
相反,您可以使用class-transformer将 param 转换为 a number:
import { Transform } from 'class-transformer';
export class CreateDataParams {
@Transform(id => parseInt(id), {toClassOnly: true})
id: number;
}
Run Code Online (Sandbox Code Playgroud)
然后你使用ValidationPipe带有选项的transform: true:
@Post(':id')
@UsePipes(new ValidationPipe({transform: true}))
async create(
@Param() params: CreateDataParams,
@Body() createDto: CreateDto
) {
// params.id
}
Run Code Online (Sandbox Code Playgroud)
但请注意,这是不安全的,因为例如parseInt('5abc010')是5. 因此,您可能希望在转换函数中进行额外检查。
| 归档时间: |
|
| 查看次数: |
5878 次 |
| 最近记录: |