Node.js res.locals变量为空或超出范围?

Node.js res.locals变量为空或超出范围?,node.js,express,Node.js,Express,因此,当我登录到我的网站并在同一url(例如:localhost/private/xxxx)内导航时,res.locals.user返回一个对象 当我超出范围(例如:localhost/xxxx)时,res.locals.user为空 /app.js /controllers/index.js 登录res.locals.user后,此处仍然为空 /controllers/member.js res.locals.user正确返回用户,无论我导航到/private、/private/somet

因此,当我登录到我的网站并在同一url(例如:localhost/private/xxxx)内导航时,res.locals.user返回一个对象

当我超出范围(例如:localhost/xxxx)时,
res.locals.user
为空

/app.js


/controllers/index.js

登录
res.locals.user后,此处仍然为空


/controllers/member.js

res.locals.user
正确返回用户,无论我导航到/private、/private/something还是/private/darkside


这是因为我在使用
路由器时使用了中间件路由。使用('/private',require('./member.js')?如何修复此问题?

res.locals
是传递给应用程序渲染引擎的对象。您可以通过passport身份验证策略中的
req.session.user=user
设置用户详细信息。这样您就可以从您的任何路线访问用户。

最后,我只需添加

router.use(function (req, res, next) {
  if(req.isAuthenticated()) {
    res.locals.user = req.user;
  }
  return next();
});
在所有我的路线之前,删除
res.locals.user=req.user来自member.js文件

所以它会给我这个:

/controllers/index.js


这样做的问题是,我需要将用户添加到我的每条路线中(大约30+)。res.locals.user避免了这种情况,因为它适合接收我的模板文件。
router.use('/private', require('./member.js'));
router.use('/admin', require('./admin.js'));

/* Some basic routes. */
router.get('/', function(req, res, next) {
  res.render('index', { ... });
});
router.use(function isMember(req, res, next) {
  if(req.isAuthenticated()) {
    res.locals.user = req.user;
    return next();
  }
  req.flash('error', 'WHY YOU LITTLE!');
  res.redirect('/login');
});

router.get('/', function(req, res, next) {
  res.redirect('/private/index');
});

router.get('/something', function(req, res, next) {
  res.redirect('/private/somehting');
});

router.get('/darkside', function(req, res, next) {
  res.redirect('/private/darkside');
});
router.use(function (req, res, next) {
  if(req.isAuthenticated()) {
    res.locals.user = req.user;
  }
  return next();
});
router.use(function (req, res, next) {
  if(req.isAuthenticated()) {
    res.locals.user = req.user;
  }
  return next();
});

router.use('/private', require('./member.js'));
router.use('/admin', require('./admin.js'));

/* Some basic routes. */
router.get('/', function(req, res, next) {
  res.render('index', { ... });
});