当url中有参数时,表达样式表404错误

时间:2014-06-10 03:42:42

标签: css node.js express parameters pug

在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错误,即使函数完全相同。为什么会这样?对于这个具体案例,有些人似乎无法找到答案。

2 个答案:

答案 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只是一个重写的查询参数。

两种可能的解决方案:

  1. 使用绝对路径。如果在Express 4中使用嵌套路由器,实际上现在可以获得当前路由器的基本路径。如果您仍希望它们与任何路径相关,这可以帮助您为样式表构建路径。

  2. 使用/path?param=anything等实际查询参数。