【问题标题】:Mongoose "setter" acting like "getter"?猫鼬“二传手”表现得像“吸气”?
【发布时间】: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 文档)进行比较?

标签: mongodb node.js mongoose


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2021-04-01
    • 2014-11-05
    相关资源
    最近更新 更多