我们如何覆盖 NestJs 中的全局验证管道?

San*_*air 6 typescript class-validator nestjs

我有一个代码,其中我在文件中应用了全局验证管道,main.ts如下所示:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors();
  // Enable global validation pipe
  app.useGlobalPipes(new ValidationPipe({
    whitelist: true
  }));
}
Run Code Online (Sandbox Code Playgroud)

现在,在我的一个控制器中,我想在补丁请求中跳过 DTO 的某些属性,如下所示

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors();
  // Enable global validation pipe
  app.useGlobalPipes(new ValidationPipe({
    whitelist: true
  }));
}
Run Code Online (Sandbox Code Playgroud)

这是我的 DTO:

    @Patch(':id')
    // Override the pipes
    @UsePipes(new ValidationPipe({
        skipMissingProperties: true,
    }))
    updateProject(@Param('id') accountId: string, @Body() dataToUpdate: UpdateProjectDTO) {
        return dataToUpdate;
    }
Run Code Online (Sandbox Code Playgroud)

projectDescription如果它没有作为请求的一部分提交,我想忽略它。但在这种情况下,我的全局管道优先,但它没有skipMissingProperties定义为其属性的一部分。有没有覆盖全局管道的解决方案?

小智 0

将你的装饰器更改@IsOptional()@IsNotEmpty()