【发布时间】:2016-07-23 13:49:39
【问题描述】:
我在 Node Express 中使用了一组静态路由,遇到了一个非常奇怪的现象。
路由设置为'/list/*' 和'/setup/*' 可以访问不同的 html 文件,其中目录用作存储 id,例如更新页面上的信息 url/setup/12345 会将信息存储在 @987654324 @。
为了能够加载脚本等,还有与 /assets/ 匹配的正则表达式的路由,以允许到达 url/setup/assets/script.js 而无需使用新的存储 ID 路由到 setup.html。
我的问题是这适用于url/setup/assets/script.js,但不适用于url/list/assets/script.js,即使它们具有相同的路由。
编辑:
导航到url/list/assets/script.js 会导致list.html(不需要的行为)
导航到url/setup/assets/script.js 会导致script.js(需要的行为)
关于为什么 '/list/*'` 不起作用的任何想法?
这是我的静态路由:
app.use(/assets/, express.static(wwwPath));
app.use('/list/*', function(req, res, next) {
res.sendFile('list.html', { root: wwwPath });
});
app.use('/setup/*', function(req, res, next) {
res.sendFile('setup.html', { root: wwwPath });
});
【问题讨论】:
-
如果你不创建多个规则匹配同一路径的冲突规则,你会好很多。现在,
'/list/*'和/assets都匹配它不起作用的 URL。可能您最好为/setup/assets创建一个静态规则,为/list/assets创建另一个静态规则。然后,一切都会变得清晰明了,没有重叠,没有冲突。 -
“
/list/*不会工作”到底是什么意思? -
@Arbel - 导航到 url/list/assets/script.js 会导致 list.html(不需要的行为) 导航到 url/setup/assets/script.js 会导致 script.js(需要的行为)
-
@jfriend00 是的,可能。但无需详细说明,我需要它来工作。
-
@Presidenten - 好吧,如果您需要帮助,我建议您深入了解细节,因为它无法按照您尝试的方式工作,并且有充分的理由。模棱两可和冲突的路线只是一个非常糟糕的主意,我认为 express.static 不能按您期望的方式工作。您可能需要清理设计以匹配最佳路线的工作方式。如果你想知道为什么在你不想要的时候会得到
list.html,那么只需在express.static()中设置一个断点,然后观察它是如何匹配那个的。