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

Node.js 如何编写Express路由器以排除路径,node.js,express,Node.js,Express,我有一个网站,我正在编写一个在每个页面上运行的页面顶部例程: app.all("*",function(req,res,next){ https.get("this.site.com/api", do_stuff); next(); } 然后我在我自己的站点上实现了部分函数hits/api,这意味着当它这样做时,它将尝试无限地调用自己 只有/api下的页面需要排除,因此编写一个尽可能少的路由最有意义 我在某处也看到了一个例子,看起来真的正则表达式可以使用,但我也无法做到这一点 我试过

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

app.all("*",function(req,res,next){
  https.get("this.site.com/api", do_stuff);
  next();
}
然后我在我自己的站点上实现了部分函数hits/api,这意味着当它这样做时,它将尝试无限地调用自己

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

我在某处也看到了一个例子,看起来真的正则表达式可以使用,但我也无法做到这一点

我试过

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


…但这些似乎没有让任何东西通过。我在文档中找不到排除项,这是Express可以处理的吗?如果是,如何将编程逻辑放入中间件中:

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.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错误(因此它永远不允许路由继续到其他路由处理程序)


只需正常捕获,不调用
next()
?只需正常捕获,不调用
next()
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();
}