Reputation: 8147
I have some code that is repeated among my routes, and I always pass to the view some resulting variables from that repeated code.
Example:
/* GET /events/list */
router.get('/events/list', function(req, res) {
var blah = someFunctionThatAnalyzesUserCookie();
res.render('places/list', { title: 'Places', blah: blah });
});
/* GET /events/details */
router.get('/events/details', function(req, res) {
var blah = someFunctionThatAnalyzesUserCookie();
res.render('places/details', { title: 'Some place', blah: blah });
});
How can I refactor this?
I need to pass blah
to all of my views and I want their logics clean, like this:
/* GET /events/list */
router.get('/events/list', function(req, res) {
res.render('places/list', { title: 'Places' });
});
/* GET /events/details */
router.get('/events/details', function(req, res) {
res.render('places/details', { title: 'Some place' });
});
I googled for a while but only found how to execute something in every request, like this:
app.use(function(req, res, next) {
doSomethingInEveryRequest();
next();
});
But I can't figure out how to pass a variable to the view in every request.
Also I read about app.locals, but I guess that is more suited for constants. My passed variable depends on the user's cookies so is a... variable.
Upvotes: 2
Views: 1564
Reputation: 25882
Can you try something like bellow:-
var renderPage = function(path,fileName,title){
router.get(path,function(req,res){
var blah = someFunctionThatAnalyzesUserCookie();
res.render(fileName,{title:title, blah:blah});
});
}
renderPage('/events/list','events/list','Places');
renderPage('/events/details','events/details','Some Place');
Upvotes: 2
Reputation: 6526
I think you can use Express's middleware called "Cookie-Parser".
Here is a link to its documenation: https://github.com/expressjs/cookie-parser/blob/master/README.md
Upvotes: 0