4

将 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 并在数据从数据库返回时对其进行转换。

我完全误解了这一点吗?

4

1 回答 1

5

这实际上是 Mongoose 中的一个错误,后来在 Mongoose 2.0 中得到了修复

于 2011-07-17T17:58:22.087 回答