为啥 Mongoose 不验证空文档?
Posted
技术标签:
【中文标题】为啥 Mongoose 不验证空文档?【英文标题】:Why Mongoose doesn't validate empty document?为什么 Mongoose 不验证空文档? 【发布时间】:2013-12-28 01:38:21 【问题描述】:假设我有一个非常简单的架构,其中包含一个始终返回 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 没有运行自定义验证器。
这是设计使然吗?它是一个错误吗? 我应该扭转局面吗?我应该在验证之前手动检查空数据吗?
我做错了吗?
PS:如果你调用save
,文档将在MongoDB中保存为空,尽管有自定义验证器。
【问题讨论】:
【参考方案1】:我认为 mongoose 只会验证现有字段。
所以你可以使用'null'值来激活验证
var mofo = new Mofo(name: null);
对于空或未定义
var MofoSchema = new mongoose.Schema(
name: type: String, required: true
);
MofoSchema.path('name').validate(function (value) ..., 'no pasaran');
【讨论】:
【参考方案2】:你可以这样做:
var mofo = new Mofo( name: type: String, default: '' );
这将确保您始终在该键上有一个值来触发验证。它还使您的架构定义更易于阅读。
【讨论】:
以上是关于为啥 Mongoose 不验证空文档?的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS Express Mongoose 返回空 []