要使用并行中间件(带有
next和
done参数),您需要
true作为第二个参数传递。
除此之外,还有两种可能性:
您的
self.invalidate呼叫应引用
"username"而不是
"user"。如果那不能解决问题,可以通过将Error对象传递给
done要中止保存操作的方法来明确地使事情失败:
UserSchema.pre("save", true, function(next, done) { var self = this; mongoose.models["User"].findOne({username: self.username}, function(err, user) { if(err) { done(err); } else if(user) { self.invalidate("username", "username must be unique"); done(new Error("username must be unique")); } else { done(); } }); next();});


