传递变量以在每个请求中查看Node.js Express

时间:2014-07-18 04:25:08

标签: node.js express

我有一些代码在我的路由中重复,我总是从该重复代码传递给视图一些结果变量。

示例:

/* 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 });
});

我如何重构这个?
我需要将blah传递给我的所有观点,我希望他们的逻辑清洁,如下所示:

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

我用谷歌搜索了一段时间,但只发现了如何在每个请求中执行某些操作,如下所示:

app.use(function(req, res, next) {

    doSomethingInEveryRequest();

    next();
});

但我无法弄清楚如何在每个请求中将变量传递给视图。

我也读过app.locals,但我想这更适合常量。我传递的变量取决于用户的cookie,因此是......变量。

2 个答案:

答案 0 :(得分:2)

你可以尝试下面的东西: -

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

答案 1 :(得分:0)

我认为您可以使用名为“Cookie-Parser”的Express中间件。

以下是其文档的链接:https://github.com/expressjs/cookie-parser/blob/master/README.md