如何编写Express路由器以排除路径

时间:2018-02-16 23:10:28

标签: node.js express

我有一个网站,我正在编写一个在每个页面上运行的页面顶部例程:

app.all("*",function(req,res,next){
  https.get("this.site.com/api", do_stuff);
  next();
}

然后我意识到该功能的一部分在我自己的网站上点击/ api,这意味着当它发生时它会尝试无限地调用自己。

只有/ api下的页面需要排除,因此编写尽可能少的路径是最有意义的。

我也看到了一个看起来像真正的正则表达式的例子,但我也无法做到这一点。

我试过......

app.all("!(/api*)*", ...

app.all(/!(\/api.*).*/

......但那些似乎没有让任何事情通过。我在文档中找不到排除项,这是Express可以处理的吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:3)

您可以将编程逻辑放在中间件中:

app.all("*",function(req,res,next){
  if (req.originalUrl.startsWith('/api')) {
      // skip any /api routes
      next();
  } else {
      https.get("this.site.com/api", do_stuff);
      next();
  }
}

更清晰的整体设计是在此中间件之前插入/api路由器,并确保它处理自己的404错误(因此它永远不允许路由继续到其他路由处理程序)。

app.use('/api', apiRouter);

// no /api routes will get here
app.all("*",function(req,res,next){
  https.get("this.site.com/api", do_stuff);
  next();
}