NestJS: Как преобразовать массив в объект @Query - PullRequest
0 голосов
/ 11 декабря 2019

Я новичок в NestJS и пытаюсь заполнить фильтр DTO из параметров запроса.

Вот что у меня есть:

Запрос:

localhost:3000 / api / checklists? Station = 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 Ответ

1 голос
/ 11 декабря 2019

Вы можете передать экземпляр ValidationPipe вместо класса, и при этом вы можете передать такие параметры, как transform: true, что заставит class-validator и class-transformer выполнить,который должен передать обратно преобразованное значение.

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