gpt4 book ai didi

node.js - Node Express 中的静态路由

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:23 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com