如何在 Mongoose 中使用 app.locals 和 .findOne
How to use app.locals with .findOne in Mongoose
我想找到登录的用户,并将他们的信息设置为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 suggested to use res.locals
instead, but that didn't work. The example here 使用静态数据,但我需要动态数据,因为 user
将取决于登录者。
现在,我必须在每条路线中定义 user
变量。有没有办法全局定义一个可以在任何部分中使用的 user
变量?
根据密码判断您使用的是护照。 documentation 声明如下:
If authentication succeeds, the next handler will be invoked and the req.user
property will be set to the authenticated user.
因此您可以执行以下操作(或者您想要执行的操作):
app.use((req, res, next) => {
res.locals.user = req.user
next()
}
这会将用户对象传递给所有请求和视图。
我想找到登录的用户,并将他们的信息设置为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 suggested to use res.locals
instead, but that didn't work. The example here 使用静态数据,但我需要动态数据,因为 user
将取决于登录者。
现在,我必须在每条路线中定义 user
变量。有没有办法全局定义一个可以在任何部分中使用的 user
变量?
根据密码判断您使用的是护照。 documentation 声明如下:
If authentication succeeds, the next handler will be invoked and the
req.user
property will be set to the authenticated user.
因此您可以执行以下操作(或者您想要执行的操作):
app.use((req, res, next) => {
res.locals.user = req.user
next()
}
这会将用户对象传递给所有请求和视图。