无法使用快速路由提供静态文件,也不能使用尾部斜杠

Aba*_*aba 13 routes node.js express

我想要一个名为'main'的路由,它将提供静态文件:

app.use('/main',express.static(__dirname+'/public'));
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

http://my.site.dev/main
Run Code Online (Sandbox Code Playgroud)

CSS和JS文件不会下载,因为它试图从中获取它们

http://my.site.dev/css/styles.css
Run Code Online (Sandbox Code Playgroud)

它应该是从以下文件获取文件:

http://my.site.dev/main/css/styles.css
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用尾部斜杠访问我的网站:

http://my.site.dev/main/
Run Code Online (Sandbox Code Playgroud)

所有文件都很好

任何想法为什么没有一个尾随斜线会混淆CSS和JS之类的资源?

Tre*_*xon 21

这是一个http问题,而不仅仅是与Express相关的挑战.问题讨论在:

如果您的网址是/ main,而您的相对网址是css/style.css,则会解析为/css/style.css; 但如果您的网址是/ main /,则相对网址会解析为/main/css/style.css.

我处理此问题的策略是重定向以添加尾部斜杠.在Express中像这样:

app.all(/^\/main$/, function(req, res) { res.redirect('/main/'); });
app.use('/main/',express.static(__dirname+'/public'));
Run Code Online (Sandbox Code Playgroud)

要么:

app.enable('strict routing');
app.all('/main', function(req, res) { res.redirect('/main/'); });
app.use('/main/',express.static(__dirname+'/public'));
Run Code Online (Sandbox Code Playgroud)