我想在我的 CRUD API 上应用服务器端验证。有问题的实体称为Employee
。我正在使用employee.dto
(如下所示)创建和更新端点。
class-validator 包在该create
方法上运行良好,但当我Partial<EmployeeDTO>
在 update 方法中使用它时会忽略 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;
}
员工控制器
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
和update
方法创建单独的 DTO,但我不喜欢重复代码的想法。