快速路由数组

Express array of routes

express documentation 表示您可以为 app.use() 中的路径变量提供一个数组。我试图让路由数组中的所有路由都指向静态变量中的静态文件夹。 这是我拥有的:

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);

这会将 '/' 移动到末尾,这样其他人就有机会在 '/' 被查看和 之前进行匹配。 '/' 仅当路径不是其他路径时才使用。


仅供参考,这是一个有点奇怪的结构,您将多个 URL 路径前缀全部指向同一个 ../build 目录,以便 express.static() 在那里查找。您没有理由需要那样做。由于您的 URL 设计,这似乎是一个人为造成的问题。这样做会导致 /x.js/projects/x.js/blog/x.js 等 URL 解析为 ../build 目录中完全相同的 x.js 文件.