无法使用快速路由和无尾随斜杠来提供静态文件

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

app.use('/main',express.static(__dirname+'/public')); 

但是,当我这样做:

 http://my.site.dev/main 

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

 http://my.site.dev/css/styles.css 

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

 http://my.site.dev/main/css/styles.css 

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

 http://my.site.dev/main/ 

所有的文件都很好

任何想法为什么没有一个后面的斜线混乱像CSS和JS的资源进来?

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

如果你的URL是/ main,而你的相对URL是css / style.css,它将parsing为/css/style.css; 但如果您的URL是/ main /,则相对URL会parsing为/main/css/style.css。

我处理这个问题的策略是redirect添加尾部斜线。 在Express中像这样:

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

要么:

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

如何在HTML中请求JS / CSS文件? 如果你使用像css/styles.css这样的string,那么它会尝试从当前目录中获取它们。 /main的目录是/ (就像/main.html一样),而/main//main/ 。 一个简单的解决方法是在你的HTML中使用/main/css/styles.css