一尘不染

猫鼬唯一验证错误类型

node.js

我正在mongoose 3.0.3从npm 使用此架构:

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也会发生)。

知道为什么吗?


阅读 127

收藏
2020-07-07

共1个答案

一尘不染

我更喜欢将其放在路径验证机制中,例如

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

2020-07-07