@hackycy/egg-class-validator
TypeScript icon, indicating that this package has built-in type declarations

0.1.1 • Public • Published

egg-class-validator

NPM version npm download

基于 class-validator 提供数据校验方法。

开启插件

// config/plugin.js
exports.classValidator = {
  enable: true,
  package: '@hackycy/egg-class-validator',
};

定义验证类

import { Expose } from 'class-transformer';
import {
    Contains,
    IsInt,
    Length,
    IsEmail,
    IsFQDN,
    IsDate,
    Min,
    Max,
  } from 'class-validator';

export class Post {
    @Expose()
    @Length(10, 20)
    title: string;

    @Expose()
    @Contains('hello')
    text: string;

    @Expose()
    @IsInt()
    @Min(0)
    @Max(10)
    rating: number;

    @Expose()
    @IsEmail()
    email: string;

    @Expose()
    @IsFQDN()
    site: string;

    @Expose()
    @IsDate()
    createDate: Date;
  }

验证

import { Controller } from 'egg';
import { Id } from '../dto/id';
import { Post } from '../dto/post';

export default class HomeController extends Controller {
  public async index() {
    const { ctx } = this;
    ctx.body = await ctx.service.test.sayHi('egg');
  }

  public async test() {
    const { ctx } = this;
    // 默认验证body
    // 验证无误会获得具体的类型
    // 否则会抛出异常
    const p = await ctx.validate<Post>(Post);
    ctx.body = 'success';
  }

  public async testg() {
    const { ctx } = this;
    await ctx.validate(Id, ctx.request.query);
    ctx.body = 'success';
  }
}

ctx.validate会将传入的校验数据对象转换成Type指定的类型的,指定范型可以更友好的使用类型。

已经在Application对象上挂载了validator属性,即class-validator的Validator。

更多操作可以查看官方的文档

转换对象使用了class-transformer,可以在config中配置

import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';

export default (appInfo: EggAppInfo) => {
  const config = {} as PowerPartial<EggAppConfig>;

  // 配置 class-transformer options
  config.classValidator = {
    classTransformOptions: {
      excludeExtraneousValues: false
    }
    // 自定义错误处理
    handleError: (ctx, _errors) => {
      // 做你想做的事情,第一个参数为Context,第二个参数为ValidationError[]
      ctx.throw(400, '参数异常');
    }
  }

  // the return config will combines to EggAppConfig
  return {
    ...config,
    ...bizConfig,
  };
};

有问题或Bug

请提出issues

License

MIT

Package Sidebar

Install

npm i @hackycy/egg-class-validator

Weekly Downloads

56

Version

0.1.1

License

MIT

Unpacked Size

8.62 kB

Total Files

7

Last publish

Collaborators

  • hackycy