为什么类验证器不处理没有装饰器的字段? |嵌套js

问题描述 投票:0回答:1

我为我的端点编写了一个 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": {}
}

不幸的是我自己还没有找到解决这个问题的方法

typescript nestjs nest dto class-validator
1个回答
0
投票

因为你必须在权限属性上键入装饰器。 如果要验证对象(例如权限),则必须将权限对象的值转换为该类的实例。 类验证器需要此转换过程来执行为权限类中的每个属性定义的验证规则。

export class AddProjectRolesDto {
    @IsNumber()
    userId: number

    @IsNumber()
    projectId: number

    Type(() => Permission)
    permission: Permission

    secondErrorExample: any
}

通过这个方法,你可以解决这样的问题

© www.soinside.com 2019 - 2024. All rights reserved.