Sha*_*awn 0 routes node.js express
Express文档说您可以为 app.use() 中的路径变量提供一个数组。我试图让路由数组中的所有路由都指向静态变量中的静态文件夹。这是我所拥有的:
const static = express.static(path.join(__dirname, '../build'));
const routes = ['/','/projects','/project1','/blog']
app.use(routes, static);
Run Code Online (Sandbox Code Playgroud)
如果我为每个路由编写一个单独的 app.use() 函数,这些路由都可以与静态文件夹变量一起正常工作,但如果我可以像文档中那样在数组中获取路由,那么它会更易于维护。该文档没有显示任何表明我需要映射数组的示例。
因此,看起来(基于实验,因为这不在文档中),当您传递路由数组时,Express 会找到数组中与当前路径匹配的第一项,并仅为该项调用路由处理程序。即使有其他路由也匹配(如您的情况),它也不会再次调用这些路由处理程序。
因此,由于'/'与 一起使用时匹配所有路由app.use(),因此它将始终使用该路由,因此其他路由在使用数组时永远不会正常工作,但在作为单独路由列出时会正常工作。您可以通过确保最宽松的路线位于最后来解决此问题。因此,将您的数组更改为:
const static = express.static(path.join(__dirname, '../build'));
const routes = ['/projects','/project1','/blog', '/'];
app.use(routes, static);
Run Code Online (Sandbox Code Playgroud)
这会移动'/'到最后,以便其他人有机会在'/'查看 和 之前进行匹配。 '/'仅当该路径不是其他路径之一时才会使用。
仅供参考,这是一个有点奇怪的结构,您将多个 URL 路径前缀全部定向到同一个../build目录以便express.static()在那里查找。您没有理由需要这样做。这似乎是由于您的 URL 设计而人为造成的问题。这样做会导致像/x.js、/projects/x.js和 之类的 URL 解析为目录中/blog/x.js完全相同的文件。x.js../build
| 归档时间: |
|
| 查看次数: |
6669 次 |
| 最近记录: |