我为我的端点编写了一个 dto,但遇到了这样一个事实:它无法正常工作,如果 class-validator 应该处理的字段之一没有装饰器,则它根本不会被检查,即使我需要它是强制性的。
DTO:
import {IsNumber} from 'class-validator';
export class Permission {
addNewTask: boolean
updateTask: boolean
addEmployees: boolean
updateEmployees: boolean
addRole: boolean
updateRole: boolean
}
export class AddProjectRolesDto {
@IsNumber()
userId: number
@IsNumber()
projectId: number
permission: Permission
secondErrorExample: any
}
在上面的代码中,我尝试处理传入的数据,但问题是 class-validator 解解析的不是权限及其内容,而不是第二个ErrorExample,我添加它是为了让您更容易理解我的问题
我想指出我在控制器中使用了
@UsePipes(new ValidationPipe())
由于错误而通过验证的传入对象示例:
{
"userId": 1,
"projectId": 2,
"permission": {}
}
不幸的是我自己还没有找到解决这个问题的方法
因为你必须在权限属性上键入装饰器。 如果要验证对象(例如权限),则必须将权限对象的值转换为该类的实例。 类验证器需要此转换过程来执行为权限类中的每个属性定义的验证规则。
export class AddProjectRolesDto {
@IsNumber()
userId: number
@IsNumber()
projectId: number
Type(() => Permission)
permission: Permission
secondErrorExample: any
}
通过这个方法,你可以解决这样的问题