前端数据提交给后端,数据都是不可以信任的,持久化之前需要对数据进行校验,只有校验通过了才能做后续相应的操作。Malagu 框架通过集成 class-validator 库实现的数据校验,让数据校验更加简单、与业务代码解耦。Malagu 很多地方都使用了装饰器特性,让业务代码变得更加纯粹。class-validator 库也是采用装饰器的方式定义数据校验规则,与框架的理念高度统一。
定义校验规则
绝大部分常用的校验规则,class-validator 已经通过装饰器方式提供了,我们也可以自定义装饰器添加新的校验规则,更多详情请查看 class-validator 文档。
// src/post.ts
import { Contains, IsInt, Length, IsEmail, IsFQDN, IsDate, Min, Max} from 'class-validator';
export class Post {
@Length(10, 20)
title: string;
@Contains("hello")
text: string;
@IsInt()
@Min(0)
@Max(10)
rating: number;
@IsEmail()
email: string;
@IsFQDN()
site: string;
@IsDate()
createDate: Date;
}
验证校验规则
验证校验规则,我们不需要做任何额外的事,框架会在合适的时机自动验证校验规则。注意:为了能让框架通过反射获取到方法中需要校验的参数类型,请确保方法上必须存在一个装饰器。
**
// src/user-controller.ts
import { Controller, Post, Body } from '@malagu/mvc/lib/node';
import { Post } from './post';
@Controller('posts')
export class PostController {
@Post()
create(@Body() post: Post): Promise<Post> {
...
}
}
数据校验错误处理
当框架校验数据不通过会以 ValidationErrors
错误抛出给上层代码处理。如果我们想对该错误进行自定义处理,我们可以实现错误处理器接口 ErrorHandler
,匹配并自定义处理该错误信息。