如何一起使用 ParseIntPipe 和 Dto?

Vla*_*lub 5 dto nestjs

从查询中我得到限制参数。如何转化为数字并通过Dto进行检查?

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

分页限制

export class PaginationLimitDto {
    @IsOptional()
    @IsInt()
    limit: number;
}
Run Code Online (Sandbox Code Playgroud)

Jay*_*iel 8

查询和 URL 参数始终作为字符串对象出现,这取决于底层引擎如何处理它们。使用 DTO,您可以添加@Transform()装饰器并执行类似的操作

export class PaginationLimitDto {
  @IsOptional()
  @IsInt()
  // pre 0.3.2 syntax
  @Transform(val => Number.parseInt(val))
  // after 0.3.2 syntax*
  @Transform({ value } => Number.parseInt(value))
  limit: number;
}
Run Code Online (Sandbox Code Playgroud)

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

*请参阅Github 上的变更日志


ric*_*hul 5

装饰器的更新语法@Transorm

import { Transform } from 'class-transformer';

export class Photo {
  id: number;

  @Transform(({ value }) => parseInt(value))
  index: number;
}
Run Code Online (Sandbox Code Playgroud)