猫鼬"塞特犬"表现得像"吸气鬼"?

Jam*_*ght 4 mongoose mongodb node.js

将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,}))$/ }
});
Run Code Online (Sandbox Code Playgroud)

创建用户后,我加密了密码.然后我发现了" setter ",我将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,}))$/ }
});
Run Code Online (Sandbox Code Playgroud)

我没有做任何其他更改(我记得),当尝试使用用户登录时,我发现我的密码错误.当我查看数据时,从数据库发回的加密密码与存储在数据库中的密码不同.如果我从UserSchema中取出"setter",它看起来是正确的.

现在我的问题是"setter"的描述如下:

如上所示,setter允许您在数据到达原始mongodb文档之前对其进行转换,并将其设置为实际键上的值.

对我来说,看起来这个Setter实际上就像一个Getter,并在数据从数据库返回时转换数据.

我完全误解了吗?

Jam*_*ght 5

这实际上是Mongoose中的一个bug,已经在Mongoose 2.0中得到修复