Mongoose:Schema验证在不保存文档的情况下无效

时间:2015-09-16 17:44:25

标签: validation mongoose

当我尝试创建嵌入式架构对象时,

Mongoose Schema验证无法正常工作,而嵌入式架构对象不会存储在单独的集合中。以下是我的架构,

我的嵌入式架构与验证器,

var myValidator = function(value) {
   return value.length > 10;
}

var myValidator2 = function(value) {
   return value.length < 5;
}

var subSchema = new Schema({
    "key1": {type: String, "default": null, validate: [myValidator, "Too short value"]},
    "key2": {type: String, validate: [myValidator2, "Too long"]}
});

在我的模型文件中,我尝试这样,

var sub1 = new subSchema({key1: "short", "key2": "good"});

它应该抛出错误,因为key1的值是&#34; &#34;这对验证器无效。

但它抛出任何错误,它只是接受而且父模型存储它。

1 个答案:

答案 0 :(得分:1)

Mongoose仅对save()modelInstance.validate()执行验证。如果您需要在不将文档保存到数据库的情况下进行验证,则可以使用以下选项,

<强> 1。调用validate()

validate()模型对象上调用subSchema将通过callback

引发错误
sub1.validate(function(error) {
    // but digging this error object is tedious process
});

<强> 2。调用验证器本身

if (myValidator(value)) {
   // do action
} else {
   // throw error
}

我推荐这个解决方案,因为你只需要直接调用验证器。但请记住,与Schema Validators不同,您需要在每save()之前手动调用验证程序。