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

Package Sidebar

Install

npm i mongoose-validatefilter

Weekly Downloads

1

Version

0.0.18

License

MIT

Last publish

Collaborators

  • cloudcome