我想查找已登录的用户,并将其信息设置为app.locals
,以便我可以在任何视图中使用它。如何在Mongoose中使用.findOne的app.locals
我像这样设置它在我的server.js
文件:
app.use(ensureAuthenticated, function(req, res, next) {
User.findOne({ _id: req.session.passport.user }, (err, user) => {
console.log('user\n', user)
app.locals.logged_in_user = user;
next();
})
});
console.log('user\n', user)
确认该用户已被发现。 然后,我应该能够在任何部分,使用该用户的信息,如在我layout.hbs
文件像这样:
Currently, {{logged_in_user}} is logged in.
但是,它不工作。回答here建议使用res.locals
来代替,但这并不奏效。这个例子here使用静态数据,但我需要动态数据,因为user
将取决于谁在。
记录现在,我在每一个路线定义user
变量。有没有一种方法来全局定义一个user
变量,可用于任何部分?
“res.locals”是添加动态信息的正确对象,“app.locals”仅用于静态(仅设置一次)信息。您的中间件是否在呈现模板的路由之前声明?在这些路由中,在调用'res.render()'之前,'res.locals.logged_in_user'的值是什么? – robertklep
我刚刚拿出'ensureAuthenticated',它工作。但是,谢谢你的回复! – Farid
不过,不要使用'app.locals'。或者,如果你这样做,期望你在任何时候都只能有一个活跃用户。 – robertklep