我有一个网站,我正在编写一个在每个页面上运行的页面顶部例程:
app.all("*",function(req,res,next){
https.get("this.site.com/api", do_stuff);
next();
}
然后我意识到该功能的一部分在我自己的网站上点击/ api,这意味着当它发生时它会尝试无限地调用自己。
只有/ api下的页面需要排除,因此编写尽可能少的路径是最有意义的。
我也看到了一个看起来像真正的正则表达式的例子,但我也无法做到这一点。
我试过......
app.all("!(/api*)*", ...
和
app.all(/!(\/api.*).*/
......但那些似乎没有让任何事情通过。我在文档中找不到排除项,这是Express可以处理的吗?如果是这样,怎么样?
答案 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();
}