13

我想要一个名为“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 等资源的进入?

4

2 回答 2

22

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

如果您的 URL 是 /main 并且您的相对 URL 是 css/style.css,它将解析为 /css/style.css;但如果您的 URL 是 /main/,则相对 URL 会解析为 /main/css/style.css。

我处理这个问题的策略是重定向以添加尾部斜杠。在 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'));
于 2012-09-27T19:14:06.990 回答
1

HTML 中如何请求 JS/CSS 文件?如果您使用类似 的字符串css/styles.css,那么它将尝试从当前目录中获取它们。/mainis的目录/(就像/main.html会一样),而 for的目录/main//main/. 一个快速的解决方法是/main/css/styles.css在您的 HTML 中使用。

于 2012-06-03T01:26:33.170 回答