Non-Printable Material

    mongoose-validatefilter

    0.0.18 • Public • Published

    mongoose 数据验证与过滤

    mongoose-validatefilter

    相关文章

    http://qianduanblog.com/3314.html

    安装

    npm install mongoose-validatefilter

    API及说明

    • 引用:var mongooseValidateFilter = require('mongoose-validatefilter');
    • 实例化validatevar validate = new mongooseValidateFilter.validate();
    • 实例化filtervar filter = new mongooseValidateFilter.filter();
    • validate只有一个公开方法:validate.add(字段, 规则)
    • filter只有一个公开方法:validate.add(字段, 规则)
    • validatefilter都是按顺序来验证和过滤的。
    • mongooseValidateFilter的初始化:mongooseValidateFilter.validateFilter(Schema, validate, filter);

    较完整例子

    var mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost:27017/test');
    var mongooseValidateFilter = require('../index.js');
    var validate = new mongooseValidateFilter.validate();
    var filter = new mongooseValidateFilter.filter();
     
    // =============================== email =================================
    validate.add('email', {
        required: true,
        msg: '邮箱不能为空!',
    });
     
    validate.add('email', {
        type: 'string',
        msg: '邮箱必须为字符串格式!',
    });
     
    validate.add('email', {
        type: 'email',
        msg: '邮箱格式不正确!',
    });
     
    validate.add('email', {
        maxLength: 120,
        msg: '邮箱长度不能超过120个字符!',
    });
     
    validate.add('email', {
        callback: function(value, respond) {
            value = String(value).trim().toLowerCase();
            // 这里有3个判断值,分别为:
            // __isCreate: 执行 cretaOne 时为真
            // __isUpdate: 执行 updateOne 时为真
            // __isRemove: 执行 removeOne 时为真
            if (this.__isCreate) {
                this.model('User').findOne({
                    email: value,
                }, function(e, doc) {
                    if (e) return respond(e);
                    respond(!doc);
                });
            } else {
                respond(true);
            }
        },
        msg: '邮箱重复!',
    });
     
    filter.add('email', 'lowercase');
     
     
     
    // =============================== nickname =================================
    validate.add('nickname', {
        exist: true,
        type: 'string',
        msg: '昵称必须为字符串格式!',
    });
     
    validate.add('nickname', {
        exist: true,
        trim: true,
        minLength: 2,
        msg: '昵称长度至少为2个字符',
    });
     
    validate.add('nickname', {
        exist: true,
        trim: true,
        maxLength: 12,
        msg: '昵称长度最多为12个字符',
    });
     
     
     
    filter.add('nickname', function(value, respond) {
        if (value === undefined) value = '     匿名用户' + Date.now()+'      ';
        respond(value);
    });
    filter.add('nickname', 'trim');
     
     
     
     
     
    // 数据模型
    var Schema = new mongoose.Schema({
        // 邮箱
        email: {
            type: String,
        },
        // 昵称
        nickname: {
            type: String,
        },
    });
     
     
     
    mongooseValidateFilter.validateFilter(Schema, validate, filter);
     
    var Model = mongoose.model('User', Schema);
     
     
     
    // ==========================================================
    // ========================= test ===========================
    // ==========================================================
     
    // createOne
    var createData = {
        email: Date.now() + '@ABC.COM',
    };
    Model.createOne(createData, function(e, doc) {
        if (e) {
            console.log('错误:');
            console.log(e.message);
        } else {
            console.log('正确。');
            console.log(doc);
        }
    });
     
     
     
     
     
    // updateOne
    var updateData = {
        email: '312312@SSSSSS.COM',
        nickname: '312312',
    };
    Model.updateOne({
        _id: '535135df03f2fecc223c2f91',
    }, updateData, function(e, doc) {
        if (e) {
            console.log('错误:');
            console.log(e.message);
        } else {
            console.log('正确。');
            console.log(doc);
        }
    });
     
     
    // removeOne
    Model.removeOne({
        _id: '535135df03f2fecc223c2f91',
    }, function(e, removeLine) {
        if (e) {
            console.log('错误:');
            console.log(e.message);
        } else {
            console.log('正确。');
            console.log('删除了' + removeLine + '个文档');
        }
    });

    Install

    npm i mongoose-validatefilter

    DownloadsWeekly Downloads

    7

    Version

    0.0.18

    License

    MIT

    Last publish

    Collaborators

    • cloudcome