【发布时间】: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'
在从数据库中检索用户后,有人可以帮我找到调用这些架构方法的方法吗?
附加信息:
- 节点 v0.8.4
- express v3.0.4
- 猫鼬模块 (http://mongoosejs.com/)
【问题讨论】:
-
发现了问题,似乎我在会话中保存的用户没有为用户保留架构方法。解决了会话中只保存userId,调用另一个User.findOne(id),然后调用setPassword方法的问题。
-
有人知道更好的解决方案吗?谢谢。
-
Hm... 使用语法
User.method('auth', ...为我工作,没有任何特殊的黑客攻击。语法应该无关紧要。你用的是哪个版本的猫鼬(我有 3.5.9)?
标签: node.js mongodb express mongoose