Nodejs全球中间件

时间:2015-09-27 00:29:58

标签: node.js express routes middleware

我们如何将中间件添加到:并仅在我们调用它时使用该中间件。目前我有这个代码:

app.use()

我正在尝试将ensureUser添加到我有路由的所有文件中。我带来了一个解决方案,将该文件添加到一个文件,并在我有路由的每个文件中要求该文件。有没有办法将该函数添加到function ensureUser(req,res,next){ if(req.isAuthenticated()) next(); else res.send(false); } app.get('/anything', ensureUser, function(req,res){ // some code }) app.use或类似的东西,就像我不必在每个文件中包含该函数一样。

1 个答案:

答案 0 :(得分:5)

是的,在任何路线之前添加app.use() 而没有第一个参数,并且应该始终调用一个

app.use(function(req, res, next){
  if(req.isAuthenticated()) next();
  else res.send(false);
});

// routing code
app.get('/', function(req, res){});
app.get('/anything', function(req,res){})
//...

通过这种方式,您不必将其包含在每个文件中。但是,通过这种方式,您还需要对每个文件进行身份验证,因此您可能希望添加一些例外(至少是身份验证页面)。为此,您可以在网址with a wildcard中包含该方法:

app.use('/admin/*', function(req, res, next){
  if(req.isAuthenticated()) next();
  else res.send(false);
});

或者在功能中添加白名单:

app.use(function(req, res, next){
  // Whitelist
  if(['/', '/public'].indexOf(req.url) !== -1
     || req.isAuthenticated())
    next();

  else
    res.send(false);
}