Hra*_*yan 4 enums case-sensitive node.js class-validator
我有这样的 anum:
export enum UserRole {
USER,
ADMIN,
BLOGGER
}
Run Code Online (Sandbox Code Playgroud)
并像这样 create.user.dto
import { IsEmail, IsEnum, IsNotEmpty, IsOptional } from 'class-validator';
import { UserRole } from './user.entity';
export class CreateUserDto {
@IsEmail()
email: string;
@IsNotEmpty()
firstName: string;
@IsNotEmpty()
lastName: string;
@IsOptional()
username: string;
@IsOptional()
@IsEnum(UserRole)
role: UserRole;
@IsNotEmpty()
password: string;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我只发布角色大写 ('ADMIN','USER') 或 'BLOGGER',角色验证不会失败。
如何使类验证器不区分大小写?我的意思是,也验证“admin”“aDmIn”为真。
对于它的价值,您还可以使用class-validator的@Transform装饰器来匹配您的枚举大小写。
export enum UserRole {
USER = "user",
ADMIN = "admin",
BLOGGER = "blogger"
}
Run Code Online (Sandbox Code Playgroud)
然后在你的 DTO 中:
@IsOptional()
@Transform(({ value }) => ("" + value).toLowerCase())
@IsEnum(UserRole)
role: UserRole;
Run Code Online (Sandbox Code Playgroud)
为我工作过"class-validator": "^0.14.0"
那么你需要通过@Matches.
@IsOptional()
@Matches(`^${Object.values(UserRole).filter(v => typeof v !== "number").join('|')}$`, 'i')
role: UserRole;
Run Code Online (Sandbox Code Playgroud)
最终规则是/^USER|ADMIN|BLOGGER$/i, wherei忽略大小写。
| 归档时间: |
|
| 查看次数: |
5392 次 |
| 最近记录: |