首页 > 解决方案 > 如何一起使用 ParseIntPipe 和 Dto?

问题描述

从查询我得到限制参数。如何转换成数字并通过 Dto 检查?

  @Get('currency/:type')
  getCurrency(
    @Param() params: CurrencyTypeDto,
    @Query('limit', ParseIntPipe) limit: number,
    @Query() query: PaginationLimitDto
  ) {

分页限制

export class PaginationLimitDto {
    @IsOptional()
    @IsInt()
    limit: number;
}

标签: nestjs

解决方案


查询和 URL 参数始终以字符串对象的形式出现,就像底层引擎如何处理它们一样。你可以用你的 DTO 做的是添加@Transform()装饰器并执行类似的操作

export class PaginationLimitDto {
  @IsOptional()
  @IsInt()
  @Transform(val => Number.parseInt(val))
  limit: number;
}

然后你只需要@Query() query: PaginationLimitDto在你的方法处理程序中。Nest'sValidationPipe会为您接听电话class-transformerclass-validator为您服务。


推荐阅读