Egg项目做请求字段验证-egg-validate-plus

10 篇文章 0 订阅

开篇

近期在倒腾Github上一个已经开源的项目,其技术栈为egg+sequelize+mysql+react,最重要的是还有配套视频,是一个很好的全栈练习,下面也给大家分享一下。

Instagram 开源项目 ts版

作者:zhoushaw

项目介绍:地址

开源代码:代码

Instagram 开源项目 js版

作者:旅梦开发团

项目介绍内附视频地址:地址

开源代码:代码

好吧还没有进入今天的主题

egg-validate-plus

该插件是为前端请求字段做验证用的,那么为什么要用它呢,这里展示一下插件作者文档里的说明

  • 为什么要自己造轮子? 其实 egg 官方有一个egg-validate插件,非常的优秀。但是我觉得有几个不满意的地方:

    • 不能使用自定义错误提示

    • 类型校验兼容性差

    • 非必填校验兼容性差

  • 提供哪些更好的体验?

    • 使用自定义错误提示

    • 提供更多的类型校验

    • 兼容更多非必填校验场景

具体的安装配置文档这里不再详细说明(见文档),这里只为常用的使用方法做一个较全面的展示,也算是一个例子吧。

安装配置请参照文档

rules中规则的编写,参见 async-validator中验证规则的编写

代码组织结构

–app
----controller
------login.js
----rules
------login
--------signIn.js

添加signIn.js规则
'use strict';

const rule = {
  email: [
    { required: true, message: '邮箱不能为空' },
    { type: 'email', message: '邮箱格式不正确' },
  ],
  password: [
    { required: true, message: '密码不能为空' },
    { type: 'string', message: '密码字段需要是字符串' },
    {
      // eslint-disable-next-line no-unused-vars
      validator(rule, value, callback, source, options) {
        const pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/;
        if (pattern.test(value)) {
          callback(); // 验证通过
          return;
        }
        callback({ message: '密码最少包含一个大小写字母、数字并且为8-16位' }); // 验证不通过
      },
    },
  ],
};

module.exports = rule;
controller中login.js使用
'use strict';

const Controller = require('egg').Controller;

class LoginController extends Controller {
  async loginIn() {
    const { ctx, app } = this;
    const { email, password } = ctx.request.body;

    const validateResult = await ctx.validate('login.signIn', { email, password }); // 第一个参数对应于rules目录下目录或文件
    if (!validateResult) {
      return;
    }

    const loginInfo = await ctx.service.user.login({ password, email });
    // 省略部分代码
    ctx.returnBody(200, '登录成功', loginInfo.userId); // returnBody方法是基于context的扩展
  }
}

module.exports = LoginController;
context.js扩展
'use strict';

module.exports = {
  returnBody(status, message, data = null) {
    this.status = status;
    this.body = {
      message,
      data,
      flag: true,
    };
  },
};

结尾

后期把自己仿的项目也会放上来,采用技术栈为

create-react-app + less + mobx + flyio + egg + sequelize + mysql

egg-react-instagram
其中七牛云域名已过期

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值