最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

快速路由数组

IT培训 admin 12浏览 0评论

快速路由数组

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文件。我不确定为什么要这么做。

快速路由数组

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文件。我不确定为什么要这么做。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论