前端数据提交给后端,数据都是不可以信任的,持久化之前需要对数据进行校验,只有校验通过了才能做后续相应的操作。Malagu 框架通过集成 class-validator 库实现的数据校验,让数据校验更加简单、与业务代码解耦。Malagu 很多地方都使用了装饰器特性,让业务代码变得更加纯粹。class-validator 库也是采用装饰器的方式定义数据校验规则,与框架的理念高度统一。
定义校验规则
绝大部分常用的校验规则,class-validator 已经通过装饰器方式提供了,我们也可以自定义装饰器添加新的校验规则,更多详情请查看 class-validator 文档。
// src/post.tsimport { 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.tsimport { 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 ,匹配并自定义处理该错误信息。
