Backend

数据校验

Malagu 框架通过集成 class-validator 库实现的数据校验,让数据校验更加简单、与业务代码解耦。

前端数据提交给后端,数据都是不可以信任的,持久化之前需要对数据进行校验,只有校验通过了才能做后续相应的操作。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,匹配并自定义处理该错误信息。


Copyright © 2024 Zero (github@groupguanfang) 粤ICP备2023102563号