• 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' ],
      },
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    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' ],
      },
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    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' ],
      },
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    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,
        };
      },
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    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('注册类型不存在');
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
  • 相关阅读:
    E-梅莉的市场经济学
    wordpress博客趣主题个人静态网页模板
    数值分析:最小二乘与岭回归(Pytorch实现)
    雷达编程实战之幅度与相位标定
    iPhone 如何强制重启
    中高级Java程序员,你不得不掌握的基本功,挑战20k+
    oracle实验四
    每日4道算法题——第002天
    查看当前所有的数据库
    Javaweb安全——JSP Webshell
  • 原文地址:https://blog.csdn.net/lihui61357457/article/details/126142189