gpt4 book ai didi

javascript - 验证不适用于 Partial - NestJS

转载 作者:行者123 更新时间:2023-12-01 16:10:43 31 4
gpt4 key购买 nike

我想在我的 CRUD API 上应用服务器端验证。有问题的实体称为 Employee .我正在使用 employee.dto (如下所示)用于创建和更新端点。
类验证器包在 create 上运行良好方法,但当我将它与 Partial<EmployeeDTO> 一起使用时会忽略 DTO 中的所有规则在更新方法中。
请使用下面的代码作为引用。
套餐

"class-transformer": "^0.2.3",
"class-validator": "^0.10.0",
员工 DTO
import { IsString, IsNotEmpty, IsEmail, IsEnum } from 'class-validator';

import { EmployeeRoles } from '../../entities/employee.entity';

export class EmployeeDTO {
@IsString()
@IsEmail()
@IsNotEmpty()
email: string;

@IsString()
@IsNotEmpty()
password: string;

@IsString()
@IsNotEmpty()
username: string;

@IsString()
@IsNotEmpty()
fullName: string;

@IsString()
@IsNotEmpty()
@IsEnum(EmployeeRoles)
role: string;
}
员工 Controller
import {
Controller,
Param,
Post,
Body,
Put,
UsePipes,
} from '@nestjs/common';

import { EmployeeDTO } from './dto/employee.dto';
import { EmployeeService } from './employee.service';
import { ValidationPipe } from '../shared/pipes/validation.pipe';

@Controller('employee')
export class EmployeeController {
constructor(private employeeService: EmployeeService) {}

@Post()
@UsePipes(ValidationPipe)
addNewEmployee(@Body() data: EmployeeDTO) {
return this.employeeService.create(data);
}

@Put(':id')
@UsePipes(ValidationPipe)
updateEmployee(@Param('id') id: number, @Body() data: Partial<EmployeeDTO>) {
return this.employeeService.update(id, data);
}
}
可能的解决方案
我可以想到的解决方法是为 create 创建单独的 DTO和 update方法,但我不喜欢重复代码的想法。

最佳答案

为了实现部分验证,可以使用PartialType实用功能。你可以在这里读到它:
https://docs.nestjs.com/openapi/mapped-types#partial
您需要创建另一个类:

export class UpdateEmployeeDTO extends PartialType(EmployeeDTO) {}
然后在您的 Controller 中,您需要替换 @Body data Partial<EmployeeDTO> 的类型至 UpdateEmployeeDto .它应该如下所示:
@Patch(':id')
@UsePipes(ValidationPipe)
updateEmployee(@Param('id') id: number, @Body() data: UpdateEmployeeDTO) {
return this.employeeService.update(id, data);
}
请记住,您应该导入 PartialType来自 @nestjs/mapped-types不是来自 @nestjs/swagger就像文档中建议的那样。更多相关信息,请访问 here

关于javascript - 验证不适用于 Partial<DTO> - NestJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57797381/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com