Как переопределить глобальный ValidationPipe в контроллере? - PullRequest
1 голос
/ 23 мая 2019

Я использую глобальные ValidationPipe с { transform: true, whitelist: true } параметрами. Однако в конкретном запросе контроллера я хочу повторно использовать один и тот же класс, но с разными валидациями, применяя метод групп валидации класса-валидатора. Поэтому необходимо переопределить параметры канала, чтобы применить новые параметры.

Это на NestJS 6.2.4. Я попытался применить новую трубу на @Query(new ValidationPipe({groups: ['res']})), но глобальная труба все еще применяется. Я применил ту же логику к @UsePipes(), но снова применяется глобальный канал.

Кроме того, я попытался применить свойство always: false вместе с группами, чтобы избежать постоянной проверки свойства, но так как это поведение по умолчанию, это не сильно помогает.

@IsNumberString({ groups: ['res'] })
resId: number;

1 Ответ

0 голосов
/ 31 мая 2019

В этом случае я бы порекомендовал добавить ValidationPipe на уровне метода в контроллере, а не на уровне контроллера.

Примерно так:

@Controller('users')
export class UsersController {

    constructor(
        private readonly usersService: UsersService
    ) {
    }

    @Post()
    @UsePipes(new ValidationPipe({
        forbidUnknownValues: true,
        transform: true
    }))
    async create(@Body() createUserDtoReq: CreateUserRequestDto): Promise<UserResponseDto> {
        return await this.usersService.create(createUserDtoReq);
    }
}

Другие могут добавить и другие предложения.

...