从查询中我得到限制参数。 如何转成数字并通过Dto检查?
@Get('currency/:type')
getCurrency(
@Param() params: CurrencyTypeDto,
@Query('limit', ParseIntPipe) limit: number,
@Query() query: PaginationLimitDto
) {
分页限制
export class PaginationLimitDto {
@IsOptional()
@IsInt()
limit: number;
}
查询和 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;
}
那么你只需要在方法处理程序中使用
@Query() query: PaginationLimitDto
。 Nest 的 ValidationPipe
会为您拨打 class-transformer
和 class-validator
。
*请参阅 Github 上的 变更日志
@Transorm
装饰器的更新语法。
import { Transform } from 'class-transformer';
export class Photo {
id: number;
@Transform(({ value }) => parseInt(value))
index: number;
}
您还可以在 main.ts 中使用全局管道,自动将任何原始数据类型解析为所需的数据类型。这将影响每个带有装饰器的 DTO 以及 @Param 或 @Query
app.useGlobalPipes(new ValidationPipe({
transform: true
}))
希望它对某人有帮助!