[TOC]
### egg-validate-plus 使用
文档:https://github.com/temool/egg-validate-plus
`rules`中规则的编写,参见[async-validator](https://github.com/yiminghe/async-validator)中验证规则的编写
### 开启插件
~~~
// config/plugin.{env}.js
exports.validatePlus = {
enable: true,
package: 'egg-validate-plus',
};
~~~
### 配置插件
~~~
// 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: '参数错误',
};
}
}
};
~~~
### 使用插件
~~~
|- 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
~~~
#### 规则的传入方式
##### [](https://github.com/temool/egg-validate-plus#1传入字符串)1.传入字符串
~~~js
// app/controller/xx.js
const { query } = this.ctx.request;
// 拿到验证结果
const validateResult = await this.ctx.validate('user.login', query)
// 验证不通过时,阻止后面的代码执行
if (!validateResult) return
~~~
注意:不要带上 rules
##### [](https://github.com/temool/egg-validate-plus#2直接传入验证规则对象)2.直接传入验证规则对象
~~~js
// 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
~~~
#### 添加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,
};
},
};
```
- 概述
- 起步
- 跨域配置
- 路径别名
- 路由
- api版本控制
- 错误和异常
- 全局异常处理
- 数据库
- 创建迁移文件
- sequelize数据类型
- 配置
- 新增
- 查询
- 条件查询
- 模糊查询
- 排序查询
- 聚合查询
- 分组查询
- 分页查询
- 修改
- 删除
- 获取器
- 修改器
- 静态属性
- 字段验证
- 外键约束
- 关联模型
- 一对一
- 一对多
- 左外连接
- 多对多
- 字段显示隐藏
- 事务
- 字段自增
- 验证层
- egg-validate
- indicative验证器
- egg-validate-plus
- betterValidate
- 校验规则
- 中间件
- 安全
- 数据加密
- 单向加密
- 示例代码
- 封装egg加密
- 上传
- path模块
- 单文件上传
- 多文件上传
- 按照日期存储
- 工具函数
- egg常用工具函数
- 缓存
- 配置缓存插件
- 设置缓存
- 获取缓存
- 删除缓存
- 消息队列
- rabbitMQ
- 安装
- 简单队列
- 工作队列
- 工作队列(dispach分发)
- 消息应答和持久化
- redis
- 数据类型
- 字符串类型(String)
- 哈希类型(Hash)
- 列表(List)
- 无序集合(Set)
- 可排序集合(Zset)
- 邮件系统
- nodeMailer
- 第三方模块
- 生成随机数
- JWT
- JWT鉴权
- 生成Token
- 短信服务
- 阿里大鱼短信验证码
- 发送短信逻辑
- 阿里短信Node类