【发布时间】:2014-01-07 03:30:01
【问题描述】:
我对 Node.js/Express/MongoDB 和 MVC 方法非常陌生,遇到了一些麻烦。我想做的是将用户最近的登录时间保存到 MongoDB。在进行原型设计时,我决定看看是否可以在用户登录时将属性 dummy 更新为值“dummy”。这是来自 model/user.js 的用户模式:
var Mongoose = require('mongoose');
var Schema = Mongoose.Schema;
var Types = Mongoose.Types;
var sUser = new Schema({
name : String,
hash : String,
salt : String,
dummy: String
});
sUser.virtual('password').set(function(pass) {
//TODO
this.hash = pass;
});
var mUser = Mongoose.model('user', sUser);
module.exports = mUser;
这段代码不是我写的,我想从中学习。我尝试了一些没有成功的事情。首先,我认为也许我可以在模型中使用 sUser.dummy.set(...) 更新 dummy 。当我检查我在 mongoHQ 上的托管数据库时,我什至没有看到虚拟属性。接下来,我尝试修改在 POST 发生时在 control/user.js 中执行的代码。我以为我可以在创建用户时在那里更新 dummy ,但没有运气。以下 POST 处理代码的片段:
app.post("/user", function(req, res, next) {
var u = new User(req.body);
u.save(function(err) {
if (err) {
next(err);
return;
}
req.session.user = u.toObject();
if(req.accepts('html')) {
console.log('redirect');
res.redirect(302, '/cmd');
} else {
console.log(u);
res.json(201, u);
}
});
});
在我走得更远之前,我希望有人能指出我正确的方向。
当用户登录时更新虚拟字段的最佳方式是什么?
【问题讨论】:
-
您在保存前尝试过
u.dummy = "dummy";吗?如果您想从req.body设置此属性,请在 HTML 表单中再创建一个输入字段。 -
我确实尝试过,但没有运气。但是,我从我的收藏中删除了所有文档,然后再次尝试,它成功了! TY