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"