快速路由数组
express documentation说您可以在app.use()中为path变量提供一个数组。我试图将路由数组中的所有路由都指向静态变量中的静态文件夹。这是我所拥有的:
const static = express.static(path.join(__dirname, '../build'));
const routes = ['/','/projects','/project1','/blog']
app.use(routes, static);
如果我为每个路由编写一个单独的app.use()函数,这些路由都可以与静态文件夹变量一起正常工作,但是如果我可以像文档中那样在数组中获取路由,则这些路由将更具可维护性。该文档没有显示任何建议我需要遍历数组的示例。
回答如下:因此,(根据实验,因为它不在文档中,所以似乎基于经验,当您传递一个路由数组时,Express会在该数组中找到与当前路径匹配的第一项,并仅为该路径调用路由处理程序。即使还有其他匹配的路由(如您的情况),它也不会再次调用那些路由处理程序。
因此,由于'/'
与app.use()
一起使用时会匹配所有路由,因此它将始终使用该路由,因此其他路由在使用数组时将永远无法正常工作,但在列为单个路由时会正常运行。您可以通过确保最宽松的路线排在最后来解决此问题。因此,将数组更改为此:
const static = express.static(path.join(__dirname, '../build'));
const routes = ['/projects','/project1','/blog', '/']
app.use(routes, static);
此将'/'
移至末尾,因此其他人有机会在'/'
和之前被匹配。 '/'
仅在路径不是您想要的其他路径之一时才会使用。
FYI,这有点怪异的结构,您要将多个URL路径前缀都定向到同一../build
目录,以便express.static()
出现在该目录中。没有理由您需要这样做。由于您的URL设计,这似乎是人为创建的问题。这样做会导致/x.js
,/projects/x.js
和/blog/x.js
之类的URL解析为x.js
目录中完全相同的../build
文件。我不确定为什么要这么做。