【问题标题】:Call schema method without create a new Model object with Nodejs/Mongoose在不使用 Nodejs/Mongoose 创建新模型对象的情况下调用模式方法
【发布时间】:2013-06-01 01:17:46
【问题描述】:

我的问题是我想更新已经存储在 MongoDB 上的用户密码,但我无法调用 User 的方法。让我展示一下代码:

用户架构:

userSchema = new Schema({ ... });

userSchema.methods.setPassword = function (passwordPlainText) {
    this.passwordHash = createHash(passwordPlainText, this.salt);
};

module.exports = mongoose.model('User', userSchema);

如果我这样做了,效果很好:

user = new User();
user.setPassword('foobar');

但如果我想做这样的事情:

User.findOne({email: req.param('email')}, function (err, user) {
    user.setPassword('foobar');
});

它输出:

TypeError: Object #<Object> has no method 'setPassword'

在从数据库中检索用户后,有人可以帮我找到调用这些架构方法的方法吗?

附加信息:

【问题讨论】:

  • 发现了问题,似乎我在会话中保存的用户没有为用户保留架构方法。解决了会话中只保存userId,调用另一个User.findOne(id),然后调用setPassword方法的问题。
  • 有人知道更好的解决方案吗?谢谢。
  • Hm... 使用语法 User.method('auth', ... 为我工作,没有任何特殊的黑客攻击。语法应该无关紧要。你用的是哪个版本的猫鼬(我有 3.5.9)?

标签: node.js mongodb express mongoose


【解决方案1】:

发现问题,似乎我在会话中保存的用户没有保留用户的架构方法。解决了在会话中只保存 userId,调用另一个 User.findOne(id) 然后调用 setPassword 方法的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多