我正在制作一个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));
^^就像那样......
或许我应该改变我的做法?
问题是我想要一个可以从模板访问的用户对象,以呈现有关用户的信息。
谢谢你, 阿里克
答案 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();
}
});