NestJS:如何在@Query对象中转换数组

时间:2019-12-11 16:01:00

标签: nestjs class-validator class-transformer

我是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[];

    // ...
}

有了这个,类验证器不会抱怨,但是,在过滤器对象站中实际上不是数组,而是单个字符串。

我想将其转换为验证管道内的数组。我该如何实现?

1 个答案:

答案 0 :(得分:1)

您可以传递ValidationPipe的实例而不是类,这样做时,可以传递诸如transform: true之类的选项,它们将使class-validator class-transformer运行,它将回传转换后的值。

@Get()
public async getChecklists(@Query(new ValidationPipe({ transform: true })) filter: ChecklistFilter): Promise<ChecklistDto[]> {
    // ...
}