2-egg-TS-通用后端管理注册系统-普通、邮箱和手机注册校验

1.用户名密码注册
在app/validate目录下新建normalUserRule.ts

export default {
  username: {
    type: 'string',
    trim: true,
    // 只能是数字或字母
    format: /^[A-Za-z0-9]{6,}$/,
    message: '用户名不符合要求',
  },
  password: {
    type: 'string',
    trim: true,
    // 必须是数字字母符号组合
    format: /^(?=.*[0-9].*)(?=.*[A-Za-z].*)(?=.*[,.#%'+*\-:;^_`].*)[,.#%'+*\-:;^_`0-9A-Za-z]{8,}$/,
    message: '密码不符合要求',
  },
  captcha: {
    type: 'string',
    trim: true,
    // 必须是数字字母符号组合
    format: /^[A-Za-z0-9]{4}$/,
    message: '验证码不符合要求',
  },
  registerType: {
    type: 'enum',
    values: [ 'normal', 'email', 'phone' ],
  },
};

2.邮箱注册
在app/validate目录下新建emailUserRule.ts

export default {
  email: {
    type: 'string',
    trim: true,
    format: /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,
    message: '邮箱验不符合要求',
  },
  password: {
    type: 'string',
    trim: true,
    // 必须是数字字母符号组合
    format: /^(?=.*[0-9].*)(?=.*[A-Za-z].*)(?=.*[,.#%'+*\-:;^_`].*)[,.#%'+*\-:;^_`0-9A-Za-z]{8,}$/,
    message: '密码不符合要求',
  },
  captcha: {
    type: 'string',
    trim: true,
    // 必须是数字字母符号组合
    format: /^[A-Za-z0-9]{4}$/,
    message: '验证码不符合要求',
  },
  registerType: {
    type: 'enum',
    values: [ 'normal', 'email', 'phone' ],
  },
};

3.手机注册
在app/validate目录下新建phoneUserRule.ts

export default {
  phone: {
    type: 'string',
    trim: true,
    format: /^1[3456789]\d{9}$/,
    message: '手机不符合要求',
  },
  password: {
    type: 'string',
    trim: true,
    // 必须是数字字母符号组合
    format: /^(?=.*[0-9].*)(?=.*[A-Za-z].*)(?=.*[,.#%'+*\-:;^_`].*)[,.#%'+*\-:;^_`0-9A-Za-z]{8,}$/,
    message: '密码不符合要求',
  },
  captcha: {
    type: 'string',
    trim: true,
    // 必须是数字字母符号组合
    format: /^[A-Za-z0-9]{4}$/,
    message: '验证码不符合要求',
  },
  registerType: {
    type: 'enum',
    values: [ 'normal', 'email', 'phone' ],
  },
};

4.使用统一返回格式
在app目录下新建extend目录,并在extend目录下创建context.ts
这个文件主要是统一try和catch应该返回什么内容,你也可以自己定义

module.exports = {
  success(data, status = 200, msg = '成功') {
    this.status = status;
    // this就是ctx对象,在其中可以调用ctx上的其他方法,或访问属性
    this.body = {
      code: status,
      msg,
      data,
    };
  },
  error(status = 500, msg = '错误') {
    this.status = status;
    // this就是ctx对象,在其中可以调用ctx上的其他方法,或访问属性
    this.body = {
      code: status,
      msg,
    };
  },
};

5.user.ts

import { Controller } from 'egg';
import NormalUserRule from '../validate/normalUserRule';
import EmailUserRule from '../validate/emailUserRule';
import PhoneUserRule from '../validate/phoneUserRule';
const enum RegisterTypeEnum{
  Normal='normal',
  Email='email',
  Phone='phone'
}
export default class UserController extends Controller {
  public async create() {
    const { ctx } = this;
    try {
      this.validateUserInfo();
      ctx.success({});
    } catch (e:any) {
      if (e.errors) {
        // 校验失败错误为e.errors
        ctx.error(400, e.errors);
      } else {
        // 校验类型不存在错误为e.message
        ctx.error(400, e.message);
      }
    }
  }
  private validateUserInfo() {
    const { ctx } = this;
    const data = ctx.request.body;
    const registerType = data.registerType;
    switch (registerType) {
      case RegisterTypeEnum.Normal:
        ctx.validate(NormalUserRule, data);
        break;
      case RegisterTypeEnum.Email:
        ctx.validate(EmailUserRule, data);
        break;
      case RegisterTypeEnum.Phone:
        ctx.validate(PhoneUserRule, data);
        break;
      default:
        throw new Error('注册类型不存在');
    }
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值