【发布时间】:2011-10-07 04:42:15
【问题描述】:
在 MongoDB 和 Node.js 中使用 Mongoose
以前我的 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 一样,并在数据从数据库返回时对其进行转换。
我完全误解了吗?
【问题讨论】:
-
我不确定发生了什么,但您是否尝试过将 user.password 与 user.doc.password (应该是原始 mongo 文档)进行比较?