什么是 class-transformer-validator
class-transformer-validator 是一个基于 TypeScript 且使用装饰器语法的 npm 包,它可以通过装饰器来帮助我们轻松地将 object 转换为 class instance,同时也支持对该 class instance 进行数据验证和类型约束。
安装
npm install class-transformer class-validator class-transformer-validator
基本用法
假设我们需要定义一个 User 类来保存用户的信息,该类需要有一个 name 属性和一个 age 属性。
-- -------------------- ---- ------- ------ - --------- -------- - ---- ------------------ ------ - ---------- ---- - ---- -------------------- ----- ---- - ----------- ------------------ ------- -- ------------- ----- ------- ----------- -------- -- ------- ---- ------- -
上述代码中,我们使用了 @IsString 和 @IsNumber 这两个装饰器来指定 User 类的属性类型,在这段代码中我们同时使用了 @Transform 和 @Type 两个装饰器来转换值,@Transform 装饰器会在将值赋给属性前对值进行一些预处理,而 @Type 装饰器则指定了值的类型。
接下来我们可以用 class-transformer-validator 提供的 validateOrReject 方法来对 User 对象进行验证,代码如下:
import { validateOrReject } from 'class-validator'; import { plainToClass } from 'class-transformer'; const user = plainToClass(User, { name: ' Tom ', age: '18' }); validateOrReject(user) .then(() => console.log('user is valid')) .catch(errors => console.log('user is invalid', errors));
上述代码中,我们使用了 class-transformer 提供的 plainToClass 将普通 JavaScript 对象转换为 User 类的实例,之后我们调用了 validateOrReject 方法来验证实例是否符合规定的类型和约束,如果符合规定,那么打印出 user is valid,否则打印出 user is invalid 和错误信息对象。
进阶用法
自定义验证器
defaultValidators 里带了很多基础的验证函数,然而,对于一些定制化的验证要求,比如需要验证一个字符串是否为纯数字,就需要我们自己定义一些验证器。
-- -------------------- ---- ------- ------ - ------------------ ------------------- - ---- ------------------ ------ -------- -------------------------------- ------------------ - ------ ---------------- ------- ------------- ------- - ------------------- ----- --------------- ------- ------------------- ------------- ------------- -------- ------------------ ---------- - --------------- ---- ----- -------------------- - ----- --- - ----------- ------ ---------------- -- -------------------- -------------------- - ------ ----------------- ------ ------- ---- -------- -- -- --- -- -
在上述代码中,我们编写了一个 validate 方法来验证一个字符串是否为纯数字,之后我们通过 registerDecorator 方法将该验证器装饰器化,并将其作为自定义验证器应用在 User 类的属性 name 上。
-- -------------------- ---- ------- ------ - --------- -------- - ---- ------------------ ------ - ---------- ---- - ---- -------------------- ----- ---- - ----------- ------------------ ------- -- ------------- ----- ------- ----------- -------- -- ------- ---- ------- --------------- ------ ------- -
在上述代码中,我们将自定义的验证器 @IsOnlyNumber 应用在了 User 类的 phone 属性上。
自定义消息
默认情况下,class-validator 提供的验证器返回的错误消息并不友好,我们需要对这些消息进行自定义。对于一个验证器的错误消息,我们可以在装饰器中传递一个 options 对象,来指定这个错误消息的具体信息。
import { IsOnlyNumber } from './IsOnlyNumber'; class User { @IsOnlyNumber({ message: 'Your phone should contain only digits, but got $value', }) phone: string; }
上述代码中,我们在 @IsOnlyNumber 装饰器中传递了一个 options 对象,它包含了我们自定义的消息。在这个消息中,$value 会被替换为验证错误的具体值。
总结
以上就是使用 class-transformer-validator 的基本和进阶用法,这个 npm 包可以帮助我们轻松地进行数据验证和类型约束,大大提高了代码的健壮性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/202080