Mongoose唯一验证错误类型
我正在使用来自npm的mongoose 3.0.3
的这个架构:
var schema = new Schema({
_id: Schema.ObjectId,
email: {type: String, required: true, unique: true}
});
如果我尝试保存已经在db中的电子邮件,我希望得到一个ValidationError
,如果省略required
字段。然而事实并非如此,我得到了一个MongoError: E11000 duplicate key error index
。
这不是验证错误(即使我删除unique:true也会发生)。
知道为什么吗?
回答如下:我更喜欢把它放在路径验证机制中,比如
UserSchema.path('email').validate(function(value, done) {
this.model('User').count({ email: value }, function(err, count) {
if (err) {
return done(err);
}
// If `count` is greater than zero, "invalidate"
done(!count);
});
}, 'Email already exists');
然后它会被包裹到ValidationError
中,当你调用validate
或save
时它将作为第一个参数返回。