2016-05-11 130 views
3

因此,當我登錄到我的網站並在同一網址內導航時(例如:localhost/private/xxxx),res.locals.user會返回一個對象。res.locals變量爲空或超出範圍?

當我超出範圍(例如:localhost/xxxx)時,res.locals.user爲空。

/app.js

... 
app.use(passport.session()); 
app.use(require('./controllers')); 
... 

/控制器/ index.js

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

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

洛在res.locals.user後仍然空在這裏


/控制器/ member.js

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'); 
}); 

res.locals.user正確返回用戶,我是否轉到/私人/私營/東西/私營/暗邊

是否爲ca使用router.use('/private', require('./member.js'));時我使用中間件路由嗎?我該如何解決?

回答

1

最後我只是不得不從member.js我的所有路由之前添加

router.use(function (req, res, next) { 
    if(req.isAuthenticated()) { 
    res.locals.user = req.user; 
    } 
    return next(); 
}); 

和刪除res.locals.user = req.user;文件

所以它會給我這樣的:

/controllers/index.js

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', { ... }); 
}); 
2

res.locals是傳遞給您的應用程序的渲染引擎的對象。您可以在護照認證策略中設置req.session.user = user的用戶詳細信息。因此,您可以通過任何路由訪問用戶。

+0

這樣做的問題是,我需要將用戶添加到我的每個路線(大約30+)。 res.locals.user避免了這一點,因爲它是正確的接受我的模板文件。 – Goowik