我在Node Express中使用了一组静态路由,并且遇到了一种非常奇怪的现象。
设置路由,以便'/list/*'
和'/setup/*'
访问不同的html文件,其中目录被用作存储ID,例如更新页面url/setup/12345
上的信息会在12345
中存储信息。
为了能够加载脚本等,还有匹配/assets/
正则表达式的路由,以便在不使用新存储ID路由到url/setup/assets/script.js
的情况下访问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 });
});
答案 0 :(得分:0)
解决方案是使用自定义中间件。以下是新路线:
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 });
});