假设我有一个非常简单的模式,其中包含一个自定义验证函数,该函数始终返回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);
然后我创建了一个新的文档实例并对其进行验证:
var Mofo = mongoose.model('Mofo');
var mofo = new Mofo({name: "Tarte flambée"});
mofo.validate(function(err) {
console.log(err);
});
非常好,自定义验证函数被调用并且err
被填充。
但现在我使用相同的方法没有数据:
var Mofo = mongoose.model('Mofo');
var mofo = new Mofo({});
mofo.validate(function(err) {
console.log(err);
});
自定义验证函数未被调用,且err
未定义。为什么?我不理解为什么Mongoose没有运行自定义验证器。
这是设计上的行为吗?还是一个bug?我应该使用替代方法吗?在验证之前应该手动检查空数据吗?
我做错了什么吗?
PS:如果调用save
,则尽管有自定义验证器,文档将在MongoDB中保存为空。