簡體   English   中英

ValidationPipe 不會剝離 Nestjs 中給定的 object

[英]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();

這是update-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

@Controller('categories')
export class CategoryController {

  constructor(private categoryService: CategoryService) {}



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

}

當“給定類別”記錄項目時,他們有 _id 哪個前端發送到 api 而我沒有在我的 dto 中將該道具列入白名單。 為什么我要接收那個道具? 我還嘗試了“forbidNonWhitelisted”,有趣的是請求沒有失敗:)) 似乎 useGlobalPipes 對我不起作用

只需使用ParseArrayPipe

只需更新您的controller.ts

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

確保設置了itemswhitelist

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM