在localhost上使用express 3.5.1 我有我的app.js文件
app.use(express.static(path.join(__dirname, 'public')));
我的style.css文件位于public / stylesheets
在我的page.jade文件中我有
doctype html
html
head
link(rel = "stylesheet" href = "stylesheets/style.css")
body
// more stuff here
最后,在我的路线中我有
app.get('/path', dostuff);
app.get('/path/:param', dostuff);
function dostuff(req,res) {
res.render('page');
}
现在,当我去localhost:3000 / path时,一切都很好,包含了style.css。但是我转到localhost:3000 / path / anything,页面仍然呈现,但是我碰巧包含的任何样式表都会出现404错误,即使函数完全相同。为什么会这样?对于这个具体案例,有些人似乎无法找到答案。
答案 0 :(得分:5)
对于http://localhost:3000/path/foo
,浏览器使用http://localhost:3000/path
作为基本网址,因此它正在尝试请求http://localhost:3000/path/stylesheets/style.css
,因为stylesheets/style.css
是相对链接。用/
作为前缀,将其转换为绝对链接......
link(rel = "stylesheet" href = "/stylesheets/style.css")
答案 1 :(得分:2)
您的样式表href是相对的,浏览器会看到/path/anything
的请求,因此它会在/stylesheets/style.css
处结束。浏览器不知道它是同一页面,anything
只是一个重写的查询参数。
两种可能的解决方案:
使用绝对路径。如果在Express 4中使用嵌套路由器,实际上现在可以获得当前路由器的基本路径。如果您仍希望它们与任何路径相关,这可以帮助您为样式表构建路径。
使用/path?param=anything
等实际查询参数。