Mongoose uses validate validation to obtain custom validation information

Data model layer (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 layer (user Dao)

To be honest, I don't know the name of the dao layer (wry smile)

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 use

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: '电话号码格式不正确' } 
}

Custom validation (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
official document
Post-upload project address

Guess you like

Origin blog.csdn.net/cc_King/article/details/111148920