[英]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);
}
確保設置了items
和whitelist
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.