我应该在会话中放置一个mongoose文档对象吗?

时间:2014-02-25 09:26:44

标签: javascript session express mongoose

我正在使用nodejs + expressjs + mongoosejs作为网络应用。我有一个想法,但不知道它是对的。

当用户登录系统时,我查询mongodb进行授权,该查询以json格式返回用户文档作为结果,我可以忽略它并继续下一步。但我想我可以使用lean()设置获取mongoose文档对象,并将其放入会话中。所以如果使用用户的信息进行任何进一步的操作,我可以使用会话中的那个,不需要再次查询它。如果用户想要更新他的状态,我可以保存这个对象,不需要findByIdAndUpdate,对吧?像这样:

// This is the user login process on express
exports.login = function(req, res, next) {

    // do nothing if login info are not enough
    if (!req.body.email || !req.body.password) {
        res.status(400).json({
            title: msgMissAuthInfoTitle,
            msg: msgMissAuthInfo
        });
    }

    // look up user info (the req.body has user's email and password)
    User.findOne(req.body)
        .lean(false)  // here I set it to false to get a mongoose document object
        .exec(function(err, user) {

        // pass if error happend
        if (err) next(err);
        // if the account not found, return the fail message
        else if (!user) {
            res.status(401).json({
                title: msgAuthFailedTitle,
                msg: msgAuthFailed
            });
        }
        // if account could be found
        else {
            // put account(the mongoosejs document object) into session
            req.session.user = user;

            res.json({
                msg: "welcome!"
            });
        }
    });
};

而且,比如,用户想要更新他的出生日:

// This is user info update process on express
exports.update = function(req, res, next) {

    // Could it be simple like this?
    req.session.user.set('birthDay', req.body.birthDay).save(function(err, updatedUser) {
        if (err) next(err);
        else res.send(updatedUser);
    });
};
我应该这样做吗?这个想法有什么问题吗? 感谢任何提示。

0 个答案:

没有答案