等待mongoose获取用户数据以注入本地

时间:2015-12-27 22:17:02

标签: node.js mongodb express mongoose

我正在制作一个Web应用程序,用户需要在其中进行身份验证。 我创建了一个全局变量(app.locals),指示用户是否经过身份验证

app.use('/', function (req, res, next)
{
    app.locals.logedIn = req.session.user_id !== undefined;

    if (app.locals.logedIn)
    {
        mongoose.model('users').findById(req.session.user_id).exec(function (err, user)
        {
            app.locals.user = user;
        });
    }
    else
    {
        app.locals.user = null;
    }

    next();
});

到目前为止一切正常。 当我尝试为经过身份验证的用户注入用户对象时,问题就开始了:

mongoose.model('users').findById(req.session.user_id).exec(function (err, user)
{
    app.locals.user = user;
}).wait();

每当我尝试远程访问用户全局(例如在模板中)时,它都会失败,并说用户变量为空。

我认为发生这种情况是因为我不等待将用户对象注入当地人。

有没有办法等待mongoose查询完成?

geometry.setIndex(new THREE.BufferAttribute(indices, 1));

^^就像那样......

或许我应该改变我的做法?

问题是我想要一个可以从模板访问的用户对象,以呈现有关用户的信息。

谢谢你, 阿里克

1 个答案:

答案 0 :(得分:2)

您需要将next()位置于exec回调中。

app.use('/', function (req, res, next)
{
    app.locals.logedIn = req.session.user_id !== undefined;

    if (app.locals.logedIn)
    {
        mongoose.model('users').findById(req.session.user_id).exec(function (err, user)
        {
            app.locals.user = user;
            next();
        });
    }
    else
    {
        app.locals.user = null;
        next();
    }
});