Как переопределить глобальный 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);
}
}
Другие могут добавить другие предложения, хотя.