如何在 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()
}

这会将用户对象传递给所有请求和视图。