Как переопределить глобальный ValidationPipe в контроллере?

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

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

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

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

1 ответ

В этом случае я бы порекомендовал добавить 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);
    }
}

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

Другие вопросы по тегам