Mrcdh技术博客 Mrcdh技术博客
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Mrcdh

全栈开发小学生
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 常用插件

    • egg-cors(跨域配置)
    • egg-router-plus(路由分组)
    • egg-validate-plus(参数校验基于async-validator)
      • 安装
      • 配置插件
      • 使用
        • 目录结构
        • 传入字符串
        • 直接传入验证规则对象
      • 添加规则文件
  • 常用技巧

  • 《Eggjs》
  • 常用插件
mrcdh
2021-03-12
目录

egg-validate-plus(参数校验基于async-validator)

# 安装

npm i egg-validate-plus --save
1

# 配置插件

{app_root}/config/plugin.{env}.js:

exports.validatePlus = {
  enable: true,
  package: 'egg-validate-plus',
};
1
2
3
4

{app_root}/config/config.{env}.js:

config.validatePlus = {
  resolveError(ctx, errors) {
    if (errors.length) {
      ctx.type = 'json';
      ctx.status = 400;
      ctx.body = {
        code: 400,
        error: errors,
        message: '参数错误',
      };
    }
  }
};
1
2
3
4
5
6
7
8
9
10
11
12
13

# 使用

# 目录结构

|- MY-PROJECT
  |- app
    |- controller
      |- user.js
      |- post.js
    |- rules
      |- user
        |- login.js [用户登录参数校验规则]
      |- post
        |- add.js [创建 post 参数校验规则]
  |- config
    |- config.default.js
    |- plugin.js
  |- package.json
  |- README.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 传入字符串

// app/controller/xx.js
const { query } = this.ctx.request;

// 拿到验证结果 rules/user/login.js,第一个参数对应rules目录下的目录或文件
const valid = await this.ctx.validate('user.login', query)
// 验证不通过时,阻止后面的代码执行
if (!valid) return
1
2
3
4
5
6
7

# 直接传入验证规则对象

// app/controller/xx.js
// 直接引入 rules 文件下的验证规则,也可以是自己写的验证规则对象
const rule = this.app.rules.user.login
// 数据格式
// const rule = {
//   id: [
//     { required: true },
//     { type: 'number', message: 'id 必须为数字 }
//   ],
//   password: [
//     { required: true },
//     { type: 'string', message: 'password 必须为字符串 }
//   ]
// }

// 从客户端传入的参数 
const { query } = this.ctx.request;
// 数据格式: 
// query = {
//   username: 123456,
//   password: 'abcdefg'
// }

// 拿到验证结果
const validateResult = await this.ctx.validate(rule, query)
// 验证不通过时,阻止后面的代码执行
if (!validateResult) return
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

# 添加规则文件

rules/user/login.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;
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
#egg
上次更新: 2023/09/22, 16:54:32
egg-router-plus(路由分组)
vscode下的egg用户片段

← egg-router-plus(路由分组) vscode下的egg用户片段→

最近更新
01
uniapp常见问题
03-19
02
Vue3项目搭建
12-25
03
使用pnpm的monorepo组织项目
11-01
更多文章>
Theme by Vdoing | Copyright © 2020-2025 Mrcdh | 苏ICP备2020058908号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×