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);
}
确保设置 items
和 whitelist
。
我正在使用 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);
}
确保设置 items
和 whitelist
。