NestJS:如何转换@Query 对象中的数组
NestJS: How to transform an array in a @Query object
我是 NestJS 的新手,我正在尝试从查询参数中填充过滤器 DTO。
这是我的:
查询:
localhost:3000/api/checklists?stations=114630,114666,114667,114668
控制器
@Get()
public async getChecklists(@Query(ValidationPipe) filter: ChecklistFilter): Promise<ChecklistDto[]> {
// ...
}
DTO
export class ChecklistFilter {
@IsOptional()
@IsArray()
@IsString({ each: true })
@Type(() => String)
@Transform((value: string) => value.split(','))
stations?: string[];
// ...
}
有了这个,class 验证器不会抱怨,但是,在过滤器对象站中实际上不是一个数组,而是一个字符串。
我想将其转换为验证管道中的数组。我怎样才能做到这一点?
您可以传递 ValidationPipe
的实例而不是 class,这样做时您可以传递 transform: true
等选项,这将使 class-validator
和 class-transformer
运行,应该传回转换后的值。
@Get()
public async getChecklists(@Query(new ValidationPipe({ transform: true })) filter: ChecklistFilter): Promise<ChecklistDto[]> {
// ...
}
export class ChecklistFilter {
@IsOptional()
@IsArray()
@IsString({ each: true })
@Type(() => String)
@Transform(({ value }) => value.split(','))
stations?: string[];
// ...
}
--
@Get()
public async getChecklists(@Query() filter: ChecklistFilter): Promise<ChecklistDto[]> {
// ...
}
- "class-变压器": "^0.4.0"
- "class-验证器": "^0.13.1"
我是 NestJS 的新手,我正在尝试从查询参数中填充过滤器 DTO。
这是我的:
查询:
localhost:3000/api/checklists?stations=114630,114666,114667,114668
控制器
@Get()
public async getChecklists(@Query(ValidationPipe) filter: ChecklistFilter): Promise<ChecklistDto[]> {
// ...
}
DTO
export class ChecklistFilter {
@IsOptional()
@IsArray()
@IsString({ each: true })
@Type(() => String)
@Transform((value: string) => value.split(','))
stations?: string[];
// ...
}
有了这个,class 验证器不会抱怨,但是,在过滤器对象站中实际上不是一个数组,而是一个字符串。
我想将其转换为验证管道中的数组。我怎样才能做到这一点?
您可以传递 ValidationPipe
的实例而不是 class,这样做时您可以传递 transform: true
等选项,这将使 class-validator
和 class-transformer
运行,应该传回转换后的值。
@Get()
public async getChecklists(@Query(new ValidationPipe({ transform: true })) filter: ChecklistFilter): Promise<ChecklistDto[]> {
// ...
}
export class ChecklistFilter {
@IsOptional()
@IsArray()
@IsString({ each: true })
@Type(() => String)
@Transform(({ value }) => value.split(','))
stations?: string[];
// ...
}
--
@Get()
public async getChecklists(@Query() filter: ChecklistFilter): Promise<ChecklistDto[]> {
// ...
}
- "class-变压器": "^0.4.0"
- "class-验证器": "^0.13.1"