sports
sports

Reputation: 8147

Pass a variable to view in every request, Node.js Express

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

Answers (2)

Mritunjay
Mritunjay

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

ahoffer
ahoffer

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

Related Questions