关于node.js:链接到通过子路由渲染的Jade模板中的静态文件

Link to static files from Jade template rendered from a sub route

Node.js / Express / Jade有一个非常基本的问题,很难描述。在我的node.js应用程序中,我使用Express框架路由HTTP请求。我还使用Jade模板作为视图,它们本身链接到通过app.use(express.static(__dirname + '/public'));命令声明为静态的目录内的文件(css,js等)。

当我将请求路由到/about/contact之类的资源时,一切都按预期工作。但是我发现,只要我的资源具有多个"级别",如/about/me,同一玉视图仍将呈现,但最终会在没有CSS样式的浏览器中出现!

所以我的假设是,由资源级别代表的虚拟目录在jade认为它必须寻找相对路径的地方搞砸了(在这种情况下,是在哪里找到包含静态文件的public目录)。

我不能只在玉模板中添加路径前缀,因为我必须对不同的资源类型使用相同的模板,因此我需要一种适用于任意资源级别的解决方案。

有这样的解决方案吗?


我猜您的Jade模板具有如下外观:

1
2
3
4
doctype html
  head
    link(rel="stylesheet", type="text/css", href="css/style.css")
    ...

样式表的href是相对路径,这意味着浏览器将查找相对于当前页面的CSS文件。例如:

  • http://example.com/abouthttp://example.com/css/style.css
  • http://example.com/about/companyhttp://example.com/about/css/style.css

您可以将href更改为绝对路径,这样无论您位于哪个子目录中,CSS文件的位置都将始终保持不变:

1
link(rel="stylesheet", type="text/css", href="/css/style.css")

此处的关键更改是href开头的正斜杠,将相对路径变为绝对路径。