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

Node.js 等待mongoose获取用户数据以注入本地数据,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我正在制作一个web应用程序,希望用户在其中进行身份验证。 我创建了一个全局变量(app.locals),它指示用户是否经过身份验证 app.use('/', function (req, res, next) { app.locals.logedIn = req.session.user_id !== undefined; next(); }); 到目前为止一切正常。 当我尝试为经过身份验证的用户注入用户对象时,问题就开始了: app.use('/', function (r

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

app.use('/', function (req, res, next)
{
    app.locals.logedIn = req.session.user_id !== undefined;
    next();
});
到目前为止一切正常。 当我尝试为经过身份验证的用户注入用户对象时,问题就开始了:

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();
});
每当我尝试远程访问用户全局变量(例如在模板中)时,它都会失败并说用户变量为null

我想之所以会这样,是因为我不等待用户对象被注入到局部变量中

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

mongoose.model('users').findById(req.session.user_id).exec(function (err, user)
{
    app.locals.user = user;
}).wait();
^^比如说像那样

或者我应该改变我的方法

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

谢谢,,
Arik

您需要将
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();
    }
});

别担心。也不要忘记捕捉错误<代码>下一步(错误)