在使用nestjs开发应用时,我们一般需要对前端提交的数据进行验证,此时就需要用到class-validator这个库了。
首先看一段实例代码:
代码语言:typescript复制import { IsInt, Min, Length, validate } from 'class-validator';
class Book {
@Length(10, 20)
title: string;
@IsInt()
@Min(0)
rating: number;
}
let book = new Book();
book.title = '短标题'; // 验证错误,标题太短
book.rating = -1; // 验证错误,评分低于最低限制
validate(book).then(errors => {
if (errors.length > 0) {
console.log('验证失败:', errors);
} else {
console.log('验证通过');
}
});
1、首先导入了class-validator包中的一些常用装饰器,这些装饰器一般是用在类的属性上。
2、定义一个类,用上面导出的装饰器进行装饰,起到约束定义的作用。
3、根据定义的类生成一个对象,注意这里的对象是类生成的对象,而不是字面量对象。
4、用validate方法验证上一步的对象,validate会根据对象找到生成此对象的类,然后根据类属性修饰符,对对象的相应属性进行验证,并输出结果。
到此为止,我们了解了class-validator的基本使用。但是这里我们产生了一个疑问?
前端提交的数据,经过程序解析,一般都是一个字面量对象,如果直接使用validate进行验证,validate是找不到字面量对象的生成类的,所以就谈不上验证。那怎么办呢?
此时我们需要将字面量对象转化为类对象,并且是class-validator中的修饰符修饰过的类的对象,怎么办呢?
此时我们需要另外一个库class-transformer。
class-transformer这个库的作用就是将对象转化为类对象,在转化过程中可以做一些过滤约束等等操作。
我们下片文章来讲解class-transformer的使用。