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
- thinkphp驗證器獲取$data資料,自定義驗證,多條件唯一性驗證unique驗證PHP
- jQuery Validate獲取驗證錯誤的數目jQuery
- Laravel 自定義表單驗證-自定義驗證規則Laravel
- HTML5 setCustomValidity()自定義驗證資訊HTML
- HTML5 setCustomValidity() 自定義驗證資訊HTML
- Laravel, vee-validate, 阿波羅 自定義表單時時驗證Laravel
- 自定義react資料驗證元件React元件
- jQuery Validate驗證規則的使用jQuery
- jQuery Validate驗證規則使用演示jQuery
- SpringBoot-表單驗證-統一異常處理-自定義驗證資訊源Spring Boot
- HTML5 自定義驗證資訊顯示方式HTML
- Validator | validate 驗證規則
- 前端獲取驗證碼前端
- Layui 自定義表單驗證UI
- jQuery Validate checkbox和radio驗證jQuery
- jquery.validate 表單驗證jQuery
- validate表單驗證外掛
- jQuery Validate自定義表單元素驗證通過和不通過的樣式jQuery
- Android自定義View---驗證碼AndroidView
- 阿里雲簡訊服務的使用-----獲取簡訊驗證碼阿里
- Laravel 自定義表單請求驗證忽略某些欄位驗證Laravel
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊
- 6. 自定義容器型別元素驗證,類級別驗證(多欄位聯合驗證)型別
- jQuery Validate驗證除錯開關jQuery除錯
- jQuery Validate驗證規則實質jQuery
- jQuery Validate驗證觸發的方式jQuery
- jQuery Validate忽略指定元素不驗證jQuery
- jQuery Validate非同步ajax方式驗證jQuery非同步
- ios 手機驗證碼獲取iOS
- 表單驗證自定義格式輸出
- gin自定義驗證器&轉化中文
- gRPC(七)進階:自定義身份驗證RPC
- [Laravel 8 使用者認證] Jetstream 之 如何自定義登入驗證Laravel
- 如何使用JSR303驗證及自定義訊息統一處理JS
- Jquery Validate自定義驗證規則,一個漢字等於兩個字元長度jQuery字元
- 如何驗證獲取S/MIME郵件安全證書