我正在尝试使用mongoose来验证用户模型的用户名字段的唯一性
User.schema.path('username').validate(function(value, done) {
User.findOne({username: value}, function(err, user) {
if (err) return done(false);
if (user) return done(false);
done(true);
});
}, "exists");
当我创建新用户时,这一切都很有效。但是,在更新用户数据时,我的验证失败。基本上是因为我正在尝试编辑同一个用户,因此无法验证。 I.E.当更新用户username = bob时,验证方法会找到bob并失败。
我有独特之处:对于那个领域我的模型是真的,所以mongodb会在没有我的猫鼬验证的情况下验证它。
var UserSchema = new Schema({
username: { type: String, required: true, unique: true },
password: { type: String, required: true }
);
然而,让mongo告诉我我无法插入数据的问题是没有很好的方法来提取有意义的错误消息以发送回客户端。即'抱歉用户名已存在,请选择一个新用户'
基本上我唯一可以想到解决这个问题的方法是,如果mongoose通过我的验证器,我试图验证的实际对象,而不仅仅是值。然后我可以比较_id的,即
if (current._id == new._id) //this is the same user don't fail validation on unique username