Mongoose学习全面理解(推荐)

2020-06-17 06:57:26易采站长站整理


{
message: 'Validation failed',
name: 'ValidationError',
errors:{
email:{
message: 'Validator "required" failed for path email',
name: 'ValidatorError',
path: 'email',
type: 'required'
},
name:{
message: 'Validator "required" failed for path name',
name: 'ValidatorError',
path: 'name',
type: 'required'
}
}
}

知道该错误信息的具体格式之后,我们可以从中得出我们想要的信息并反馈到控制台。


if(err){
Object.keys(err.errors).forEach(function(key) {
var message = err.errors[key].message;
console.log('Validation error for "%s": %s', key, message);
});
}

2.自定义数据验证

最简单的自定义数据验证方式就是定义一个数据验证的函数,并将它传递给schema;


var lengthValidator = function(val) {
if (val && val.length >= 5){
return true;
}
return false;
};
//usage:
name: {type: String, required: true, validate: lengthValidator }

可以看到,我们只需要在schema中添加validate键值对即可,validate对应的值便是我们自定义的验证方法;

但是该形式的数据验证无法给我们提供完整的错误信息,比如errors信息中返回的type值就会成为undefined;

在此基础上如果希望错误信息中能返回一个错误描述,那我们可以稍微进行一点修改:


//code 1
validate: { validator: lengthValidator, msg: 'Too short' }

//code 2
var weekdaySchema = new Schema({
day : {type: String, validate: {validator:/^(mon|tues|wednes|thurs|fri)day$/i, msg: 'Not a day' }
});

将validate的值修改为一个对象,并且该对象包含验证器和错误描述。

我们也可以使用另一种方式在写这些验证器,就是将验证器卸载schema外部,例如:


var validateLength = [lengthValidator, 'Too short' ];
var validateDay = [/^(mon|tues|wednes|thurs|fri)day$/i, 'Not a day' ];
//usage:
name: {type: String, required: true, validate: validateLength }
day : {type: String, validate: validateDay }

眼睛放大,一看再看,确实没错,在validate中我们传入的是一个数组了,而不是原来的对象了。

其实就validateLength这个东东来说,他就是一个简写来的,你也可以改成下面这样:


var validateLength = [
{validator: lengthValidator, msg: 'Too short'}
];

恩,到这里,应该能明白了,将对象改为数组之后,我们便可以传递多个验证器给我们的schema了,的确如此。