如何在Mongoose中使用带有.findOne的app.locals

时间:2017-07-05 03:31:03

标签: express mongoose partials

我想找到登录用户,并将其信息设置为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变量?

1 个答案:

答案 0 :(得分:1)

您正在使用护照从代码判断。 documentation声明如下:

  

如果身份验证成功,将调用下一个处理程序,并将req.user属性设置为经过身份验证的用户。

因此,您可以执行以下操作(或者您想要执行此操作):

app.use((req, res, next) => {
  res.locals.user = req.user
  next()
}

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