0.0.18 • Published 10 years ago

mongoose-validatefilter v0.0.18

Weekly downloads
20
License
MIT
Repository
-
Last release
10 years ago

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 + '个文档');
    }
});
0.0.18

10 years ago

0.0.17

10 years ago

0.0.16

10 years ago

0.0.15

10 years ago

0.0.14

10 years ago

0.0.13

10 years ago

0.0.12

10 years ago

0.0.11

10 years ago

0.0.10

10 years ago

0.0.9

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.1

10 years ago

0.0.0

10 years ago