前端数据提交给后端,数据都是不可以信任的,持久化之前需要对数据进行校验,只有校验通过了才能做后续相应的操作。Malagu 框架通过集成 class-validator 库实现的数据校验,让数据校验更加简单、与业务代码解耦。Malagu 很多地方都使用了装饰器特性,让业务代码变得更加纯粹。class-validator 库也是采用装饰器的方式定义数据校验规则,与框架的理念高度统一。

定义校验规则

绝大部分常用的校验规则,class-validator 已经通过装饰器方式提供了,我们也可以自定义装饰器添加新的校验规则,更多详情请查看 class-validator 文档。

  1. // src/post.ts
  2. import { Contains, IsInt, Length, IsEmail, IsFQDN, IsDate, Min, Max} from 'class-validator';
  3. export class Post {
  4. @Length(10, 20)
  5. title: string;
  6. @Contains("hello")
  7. text: string;
  8. @IsInt()
  9. @Min(0)
  10. @Max(10)
  11. rating: number;
  12. @IsEmail()
  13. email: string;
  14. @IsFQDN()
  15. site: string;
  16. @IsDate()
  17. createDate: Date;
  18. }

验证校验规则

验证校验规则,我们不需要做任何额外的事,框架会在合适的时机自动验证校验规则。注意:为了能让框架通过反射获取到方法中需要校验的参数类型,请确保方法上必须存在一个装饰器。
**

  1. // src/user-controller.ts
  2. import { Controller, Post, Body } from '@malagu/mvc/lib/node';
  3. import { Post } from './post';
  4. @Controller('posts')
  5. export class PostController {
  6. @Post()
  7. create(@Body() post: Post): Promise<Post> {
  8. ...
  9. }
  10. }

数据校验错误处理

当框架校验数据不通过会以 ValidationErrors 错误抛出给上层代码处理。如果我们想对该错误进行自定义处理,我们可以实现错误处理器接口 ErrorHandler ,匹配并自定义处理该错误信息。