将Mongoose与MongoDB和Node.js一起使用
之前我的UserSchema定义如下:
var UserSchema = new Schema({
username: { type: String, unique: true },
password: String,
email: { type: Email, unique: true, validate:/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ }
});
创建用户后,我加密了密码。然后我发现了“setters”,我将UserSchema更改为:
var UserSchema = new Schema({
username: { type: String, unique: true },
password: { type:String, set:encryption.Encrypt },
email: { type: Email, unique: true, validate:/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ }
});
我没有做任何其他更改(我记得)并且在尝试使用用户登录时发现我的密码错误。当我查看数据时,从数据库发回的加密密码与存储在数据库中的密码不同。如果我从UserSchema中取出“setter”,它看起来是正确的。
现在我的问题是“setter”的描述如下:
如上所示,setter允许您以前转换数据 它到达原始mongodb文档并设置为实际值 键。
对我来说,看起来这个Setter实际上就像一个Getter,并在数据从数据库返回时转换数据。
我完全误解了这个吗?
答案 0 :(得分:5)
这实际上是Mongoose中的一个错误,已经在Mongoose 2.0中修复了