如何覆盖控制器中的全局 ValidationPipe?

Mik*_*lis 8 typescript class-validator nestjs

ValidationPipe我使用带有选项的全局{ transform: true, whitelist: true }。但是,在特定的控制器请求中,我想重用相同的类但具有不同的验证,应用类验证器的验证组技术。因此,我有必要覆盖管道的选项以应用新选项。

这是在 NestJS 6.2.4 上。我尝试在 处应用新管道@Query(new ValidationPipe({groups: ['res']})),但全局管道仍然应用。我应用了相同的逻辑,@UsePipes()但再次应用了全局管道。

另外,我尝试将always: false属性与组一起应用,以避免始终验证属性,但由于这是默认行为,因此没有太大帮助。

@IsNumberString({ groups: ['res'] })
resId: number;
Run Code Online (Sandbox Code Playgroud)

A. *_*tre 0

在这种情况下,我建议在控制器内的方法级别添加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);
    }
}
Run Code Online (Sandbox Code Playgroud)

不过其他人可能会添加其他建议。

  • 我猜这里的评论不支持此功能``https://github.com/nestjs/nest/issues/2390#issuecomment-502042256``` (3认同)