数据模型层(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