我在 Node Express 中使用一组静态路由,并且遇到了一个非常奇怪的现象。
路由的设置是为了让 '/list/*'
和 '/setup/*'
获取不同的 html 文件,其中目录用作存储 ID,例如更新页面 url/setup/12345
上的信息会将信息存储在 12345
中。
为了能够加载脚本等,还需要使用正则表达式匹配 /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 });
});
最佳答案
解决方案是使用自定义中间件。以下是新路线:
var requestParser = function(req, res, next) {
if(req.originalUrl.indexOf('/assets/') >= 0) {
var assetPath = path.join(wwwPath, req.path.slice(req.url.indexOf('/assets/')));
fs.stat(assetPath, function(error, stat){
if(stat && stat.isFile()) {
res.sendFile(assetPath);
}
else{
res.status(404).send('<h1>404</h1>');
}
});
}
else {
next();
}
};
app.use(requestParser);
app.use('/list/*', function(req, res, next) {
res.sendFile('schema.html', { root: wwwPath });
});
app.use('/setup/*', function(req, res, next) {
res.sendFile('setup.html', { root: wwwPath });
});
关于node.js - Node Express 中的静态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36395563/