[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類