IT序号网

Mongoose 校验参数知识解答

sanshao 2021年05月25日 数据库 172 0
mongoose数据校验是指用户通过mongoose给mongodb数据库增加数据的时候,对数据的合法性进行的验证,在mongoose里面定义Schema的时候,通过设置字段类型,修饰符、默认参数 、数据校验等都是为了数据库数据的一致性。
required: 表示这个数据必须传入
max: 用于 Number 类型数据,最大值
min: 用于 Number 类型数据,最小值
enum:枚举类型,用于String要求数据必须满足枚举值 enum: ['0', '1', '2']
match:增加的数据必须符合 match(正则)的规则
maxlength:最大值
minlength:最小值
var mongoose=require('./db.js'); 
var UserSchema=mongoose.Schema({ 
    name:{ 
        type:String,//指定类型 
        trim:true,   //修饰符          
        required:true //该数据不能缺省 
    }, 
    sn:{ 
        type:String, 
        index:true,  //普通索引. 
        set(val){  //自定义修饰符 
            return val; 
        }, 
        // maxlength:20,//长度不能超过20 
        // minlength:10//长度不能小于10 
        // match:/^sn(.*)/ ,//必须符合该正则表达式 
        validate: function(sn) {//自定义验证规则 
            return sn.length >= 10; 
        }
    // 也可以是
    
    validate: { 
        validator: function(v) {   return /\d{3}-\d{3}-\d{4}/.test(v);   },   message: props => `${props.value} is not a valid phone number!`   },
    },    
    age:{ 
        type:Number, 
        min:0,    //用在number类型上面 
        max:150//最大值为150 
    },        
    status:{ 
        type:String,  
        default:'success', //默认值 
        enum:['success','error']   //status的值必须在 对应的数组里面  注意枚举是用在String 
    } 
}) 
module.exports=mongoose.model('User',UserSchema,'user');
const breakfastSchema = new Schema({ 
  eggs: { 
    type: Number,
min: [
6, 'Must be at least 6, got {VALUE}'], // 可以传一个数组 {VALUE}会被替换为校验的值 max: 12 }, drink: { type: String, enum: { values: ['Coffee', 'Tea'], message: '{VALUE} is not supported' } } }); const Breakfast = db.model('Breakfast', breakfastSchema); const badBreakfast = new Breakfast({ eggs: 2, drink: 'Milk' }); let error = badBreakfast.validateSync(); assert.equal(error.errors['eggs'].message, 'Must be at least 6, got 2'); assert.equal(error.errors['drink'].message, 'Milk is not supported');
const breakfastSchema = new Schema({ 
  eggs: { 
    type: Number, 
    min: [6, 'Too few eggs'], 
    max: 12 
  }, 
  bacon: { 
    type: Number, 
    required: [true, 'Why no bacon?'] 
  }, 
  drink: { 
    type: String, 
    enum: ['Coffee', 'Tea'], 
    required: function() { // 也可以是自定义的函数 
      return this.bacon > 3; 
    } 
  } 
}); 
const Breakfast = db.model('Breakfast', breakfastSchema); 
 
const badBreakfast = new Breakfast({ 
  eggs: 2, 
  bacon: 0, 
  drink: 'Milk' 
}); 
let error = badBreakfast.validateSync(); 
assert.equal(error.errors['eggs'].message, 
  'Too few eggs'); 
assert.ok(!error.errors['bacon']); 
assert.equal(error.errors['drink'].message, 
  '`Milk` is not a valid enum value for path `drink`.'); 
 
badBreakfast.bacon = 5; 
badBreakfast.drink = null; 
 
error = badBreakfast.validateSync(); 
assert.equal(error.errors['drink'].message, 'Path `drink` is required.'); 
 
badBreakfast.bacon = null; 
error = badBreakfast.validateSync(); 
assert.equal(error.errors['bacon'].message, 'Why no bacon?');

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

mongo aggregate聚合之 $addFields知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。