在许多Express.js路由的开头运行相同的代码

时间:2015-01-18 05:48:00

标签: node.js express

看看这些路线:

app.get('/', function (req, res) {
    var legacy = false;
    //LENGTHY CODE that sets legacy to true for old browsers

    if (legacy === false) {
        res.render('home');
    } else {
        res.render('legacy');
    }
});

app.get('/other', function (req, res) {
    var legacy = false;
    //LENGTHY CODE that sets legacy to true for old browsers

    if (legacy === false) {
        res.render('other');
    } else {
        res.render('legacy');
    }
});

//Many other routes like this with the legacy check.

问题是,如何避免在每条路线中重复冗长的代码?将它放入一个函数并不是一个真正的解决方案,因为这引出了一个问题,我如何避免在每个路由中调用该函数?

有没有好办法呢?

这就是所谓的中间件,也许是吗?

我们不胜感激。

2 个答案:

答案 0 :(得分:1)

是的,正如您所说,这正是中间件的用途。

app.use(function (req, res, next) {
   var legacy = false;
   if (legacy) {
       res.render('legacy');
   } else {
       next();
   }
});

答案 1 :(得分:1)

您可以使用next()。 试试这个:

app.get(['/', '/other'], function(req, res, next){                                      
  //preprocessing here                     
  next();                                                                   
});  

它接受路径,路径模式,正则表达式和数组。 如果您不希望某些路径执行此预处理,那么您可以使用Regex来取消这些路径。