Mongoose的“必需”验证器实际上做了什么?

时间:2016-01-29 23:23:52

标签: node.js mongodb mongoose

Mongoose docs about required validator不包含required实际含义的任何解释。

我认为很明显undefined不会传递此验证程序,并且所有评估为true(!!v)的值都将被允许。但是null和空字符串呢?

如果他们没有通过那个验证器,是否有一种标准的Mongoose方式允许除undefined以外的任何其他方式或者只能编写自定义验证器?

2 个答案:

答案 0 :(得分:1)

请参阅validation

  

验证程序不会在undefined值上运行。唯一的例外是必需的验证器。

测试以下架构

var CommentSchema = new mongoose.Schema({
    body: {
        type: String, required: true
    }
});

使用bodynull

保存''字段
   var c1 = new Comment({
        body: null, 
    });

   var c1 = new Comment({
        body: '', 
    });

它们都无法通过验证。

要仅验证undefined,我认为可以通过自定义验证来完成

CommentSchema.path('body')。validate(function(body){         返回typeof body!==='undefined';     },'身体不能被定义');

更新:请参阅此link

  

不支持在未定义字段上运行验证程序,目前尚未计划

在此链接中完成了一些技巧。

答案 1 :(得分:0)

添加到zangw回答,目前唯一允许除False之外的任何其他方法的合理方法是将自定义函数传递给undefined属性。它不能通过required来完成,因为自定义验证器不会在未定义的值上运行。

validate