为什么Mongoose不validation空文档?
比方说,我有一个非常简单的架构与自定义validationfunction,总是返回false。
var MofoSchema = new mongoose.Schema({ name: String }); MofoSchema.path('name').validate(function (value) { console.log("I'm validating"); return false; }, 'No pasaran'); mongoose.model('Mofo', MofoSchema);
然后我创build一个新的文档实例,并validation它:
var Mofo = mongoose.model('Mofo'); var mofo = new Mofo({name: "Tarte flambée"}); mofo.validate(function(err) { console.log(err); });
完美的是,自定义validation器function被调用, err
被填充。
但是现在我也是这样做,没有数据 :
var Mofo = mongoose.model('Mofo'); var mofo = new Mofo({}); mofo.validate(function(err) { console.log(err); });
自定义validation器函数未被调用 , err
未定义。 为什么? 我不明白为什么Mongoose没有运行自定义validation器。
这是行为的devise? 这是一个错误? 我应该扭转局面吗? 我应该在validation之前手动检查空数据吗?
难道我做错了什么?
PS:如果你打电话save
,尽pipe自定义validation器,文档将保存在MongoDB中为空。
我认为mongoose只会validation现有的领域。
所以你可以使用'空'值来激活validation
var mofo = new Mofo({name: null});
对于空或未定义
var MofoSchema = new mongoose.Schema({ name: {type: String, required: true} }); MofoSchema.path('name').validate(function (value) {...}, 'no pasaran');
你可以做:
var mofo = new Mofo({ name: { type: String, default: ''} });
这将确保您始终有一个关键的价值来触发validation。 这也使您的架构定义更易于阅读。