Node.js res.locals变量为空或超出范围?
因此,当我登录到我的网站并在同一url(例如:localhost/private/xxxx)内导航时,res.locals.user返回一个对象 当我超出范围(例如:localhost/xxxx)时,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
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', { ... });
});