mongoose使用validate驗證, 獲取自定義驗證資訊
資料模型層(userModel)
const mongoose = require('mongoose');
const reg = require('../../../utils/reg');
// const con = require('../index').getConnection();
const con = mongoose.createConnection('mongodb://127.0.0.1:27017/taobao')
const user = {
phone: {
type: String,
trim: true,
match: [reg.phone, "電話號碼格式不正確"] // 比較簡單的驗證就可以直接使用 match
},
account: {
type: String,
trim: true,
validate: {
validator: function (data) {
if (data.length >= reg.account.minLength && data.length <= reg.account.maxLength) {
return true
} else {
return false
}
},
message: '使用者名稱格式不正確' // 這裡是返回的錯誤資訊
},
},
age: {
type: Number,
validate: {
validator: function (data) {
if (data >= 0) {
return true
} else {
throw new Error('年齡格式不正確'); // 錯誤資訊也可以以丟擲的錯誤返回,這樣的話就更靈活了
return false
}
},
// message: '年齡格式不正確'
},
}
}
let userSchema = mongoose.Schema(user);
let userModel = con.model('user', userSchema);
module.exports = userModel;
Dao層(userDao)
說實話我不知道dao層的名稱(苦笑)
const mongoose = require('mongoose');
const regType = require('../../../utils/reg');
const userModel = require('../model/userModel');
async function insertOneUser(object){
return userModel.create(object);
}
module.exports = {
insertOneUser
}
test 使用
const userDao = require('../config/mongoDB/Dao/userDao');
userDao.insertOneUser({ account: 'cccccc', age: -1, phone: '1821748' })
.catch((error) => {
console.log(getErrorReason(error));
})
// 這個就是主要的方法了
function getErrorReason(error) {
// 當有多個驗證不通過的時候.toString(): ValidationError: age: 年齡格式不正確, phone: 電話號碼格式不正確
// 這裡切割需要依賴 ":" & "," 兩個字元來切割( * 所以的話提示資訊中就不要使用英文的逗號了)
let errorArray = error.toString().split(/:|,/g);
let errorObject = {};
for (let i = 1; i < errorArray.length; i += 2) {
let key = errorArray[i].trim();
let value = errorArray[i + 1].trim();
errorObject[key] = value;
}
return errorObject; // console: { age: '年齡格式不正確', phone: '電話號碼格式不正確' }
}
自定義驗證(reg.js)
const regType = {
password: {
index: /^(\w){6,20}$/, // 只能輸入6-20個字母、數字、下劃線
week: /^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+)$/, //弱:純數字,純字母,純特殊字元
middle: /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$/, // 中:字母+數字,字母+特殊字元,數字+特殊字元
strong: /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&*]+$)(?![\d!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$/, ///強:字母+數字+特殊字元
},
phone: /^1[3|4|5|7|8][0-9]{9}$/,
account: {
maxLength: 20, // 使用者名稱最大長度
minLength: 6 // 使用者名稱最小長度
}
}
module.exports = regType
官方文件
後期上傳專案地址
相關文章
- jQuery Validate自定義驗證成功資訊jQuery
- jQuery Validate自定義驗證錯誤資訊jQuery
- jQuery Validate新增自定義驗證規則jQuery
- thinkphp驗證器獲取$data資料,自定義驗證,多條件唯一性驗證unique驗證PHP
- Laravel 自定義表單驗證-自定義驗證規則Laravel
- jQuery Validate獲取驗證錯誤的數目jQuery
- MVC驗證02-自定義驗證規則、郵件驗證MVC
- MVC驗證06-自定義錯誤資訊MVC
- MVC驗證04-自定義驗證規則、日期範圍驗證MVC
- MVC驗證07-自定義Model級別驗證MVC
- HTML5 自定義驗證資訊顯示方式HTML
- 前端獲取驗證碼前端
- Layui 自定義表單驗證UI
- MVC驗證05-自定義驗證規則、驗證2個屬性值不等MVC
- jQuery Validate驗證規則的使用jQuery
- jQuery Validate驗證規則使用演示jQuery
- Laravel, vee-validate, 阿波羅 自定義表單時時驗證Laravel
- HTML5 setCustomValidity()自定義驗證資訊HTML
- HTML5 setCustomValidity() 自定義驗證資訊HTML
- SpringBoot-表單驗證-統一異常處理-自定義驗證資訊源Spring Boot
- jquery validate 手工驗證方法jQuery
- 自定義react資料驗證元件React元件
- 自定義密碼驗證函式密碼函式
- CAS自定義登入驗證方法
- Laravel 自定義表單請求驗證忽略某些欄位驗證Laravel
- 在ASP.NET MVC中使用Knockout實踐06,自定義驗證、非同步驗證ASP.NETMVC非同步
- 6. 自定義容器型別元素驗證,類級別驗證(多欄位聯合驗證)型別
- MVC驗證03-自定義驗證規則、禁止輸入某些值MVC
- ios 手機驗證碼獲取iOS
- 表單驗證自定義格式輸出
- gin自定義驗證器&轉化中文
- django 自定義登入驗證邏輯Django
- Angular 4.x 自定義驗證指令Angular
- Android自定義View---驗證碼AndroidView
- HTML5 pattern自定義驗證提示HTML
- jQueryValidate自定義各種驗證方法jQuery
- 自定義基於XML的驗證器XML
- jQuery Validate自定義表單元素驗證通過和不通過的樣式jQuery