class-validator 或 class-transformer 的验证在@Query docrator 上应用多个类型时不起作用
Validation by class-validator or class-transformer dont work when apply multiple Types on @Query docrator
我想在 @Query() 装饰器中组合多种类型(例如 ParamsWithRegex 和 PaginationParams),但是当我这样做时没有应用任何验证,如何解决?
**// MY CONTROLLER : here I combine two types but validate didnt work**
@Get()
async findAll(
@Query() query: PaginationParams & ParamsWithRegex,
) {
return 'OK'
}
// ParamsWithRegex.dto.ts
export class ParamsWithRegex {
@IsOptional()
@Transform(({ obj }) => {
return new RegExp(escapeRegExp(obj.name), 'i');
})
name?: string;
}
// paginationParams.dto.ts
export class PaginationParams {
@IsOptional()
@Type(() => Number)
@IsNumber()
@Min(1)
page?: number = 1;
@IsOptional()
@Type(() => Number)
@IsNumber()
@Min(1)
limit?: number = 8;
}
您可以使用 Mapped-Types 创建您的 Dto:
@Get()
async findAll(@Query() query: CombinedDto) {
...
}
export class CombinedDto extends IntersectionType(
ParamsWithRegex,
PaginationParams
) {}
我想在 @Query() 装饰器中组合多种类型(例如 ParamsWithRegex 和 PaginationParams),但是当我这样做时没有应用任何验证,如何解决?
**// MY CONTROLLER : here I combine two types but validate didnt work**
@Get()
async findAll(
@Query() query: PaginationParams & ParamsWithRegex,
) {
return 'OK'
}
// ParamsWithRegex.dto.ts
export class ParamsWithRegex {
@IsOptional()
@Transform(({ obj }) => {
return new RegExp(escapeRegExp(obj.name), 'i');
})
name?: string;
}
// paginationParams.dto.ts
export class PaginationParams {
@IsOptional()
@Type(() => Number)
@IsNumber()
@Min(1)
page?: number = 1;
@IsOptional()
@Type(() => Number)
@IsNumber()
@Min(1)
limit?: number = 8;
}
您可以使用 Mapped-Types 创建您的 Dto:
@Get()
async findAll(@Query() query: CombinedDto) {
...
}
export class CombinedDto extends IntersectionType(
ParamsWithRegex,
PaginationParams
) {}