2014-01-06 52 views
0

我对Node.js/Express/MongoDB和MVC方法非常陌生,并且遇到了一些麻烦。我想要做的是将用户最近的登录时间保存到MongoDB。虽然原型,我决定看看我是否能更新属性假人值“假”,当用户登录下面是模型/ user.js的用户模式:使用ExpressJS/Mongoose更新MongoDB中的值

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(...)更新虚拟模型。当我在mongoHQ上检查我的托管数据库时,我甚至没有看到该虚拟属性。接下来,我尝试了解POST时发生的在control/user.js中执行的代码。我认为我可以在用户创建时更新虚拟,但没有运气。从下面的邮政处理代码片段:

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); 
      } 
     }); 
    }); 

在我进一步去之前,我希望有人能指出我在正确的方向。

用户登录时更新虚拟域的最佳方式是什么?

+1

你试过'u.dummy =“dummy”;'保存之前吗?如果你想从'req.body'设置这个propery,那么在HTML表单中再创建一个输入域。 – hawk

+0

我确实尝试过,没有运气。但是,我从集合中删除了所有文档,然后再次尝试,并且工作正常! TY – bobbyg603

回答

0

我做了两件事来解决这个问题。首先我删除了集合中的所有文档我尝试了什么鹰建议和宾果。真正奇怪的是,我在尝试删除集合中的文档之前所建议的,并没有运气。