ValidationPipe 不会剥离 Nestjs 中的给定对象

ValidationPipe doesn't strip given object in Nestjs

我正在使用 Nestjs 和 Mongoose orm,问题是 ValidationPipe 不会从请求中删除无效道具并将给定(原始)请求发送到我的服务。

这是main.ts

async function bootstrap() {
   const app = await NestFactory.create(AppModule, {
      cors: { origin: '*' },
    });

   app.useGlobalPipes(new ValidationPipe(
     {
        transform: true,
        whitelist: true,
     }
   ))

   await app.listen(3002);
}
bootstrap();

这是更新-category.dto

export class UpdateCategoryDto {

 @IsDefined()
 id:string

 @IsDefined()
 title: string;

 @IsDefined()
 url: string;

}

最后是 category.service

async updateCategories(categories: [UpdateCategoryDto]){
   for (let i = 0; i < categories.length ; i++) {
      console.log("given categories",categories);
      await this.categoryModel.updateOne([{ _id: categories[i].id }],categories[i]);
   
   }
} 

这是我的简单控制器

@Controller('categories')
export class CategoryController {

  constructor(private categoryService: CategoryService) {}



  @Put()
  editCategories( @Body() updateCategories: [UpdateCategoryDto]) {
    return this.categoryService.updateCategories(updateCategories);
  }

}

当“给定类别”记录项目时,它们具有前端发送到 api 的 _id,而我没有在我的 dto 中将该道具列入白名单。为什么我会收到那个道具??我还尝试了“forbidNonWhitelisted”,有趣的是请求没有失败 :))似乎 useGlobalPipes 对我不起作用

只需使用ParseArrayPipe

更新您的controller.ts

@Put()
editCategories(@Body(new ParseArrayPipe({ items: UpdateCategoryDto, whitelist: true })) updateCategories: UpdateCategoryDto[]) {
  return this.categoryService.updateCategories(updateCategories);
}

确保设置 itemswhitelist