我有一些代码在我的路由中重复,我总是从该重复代码传递给视图一些结果变量。
示例:
/* 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,因此是......变量。
答案 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