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
官方文档
后期上传项目地址
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值