HTML中的相对URL通过Nodejs中间件路由某些子集时



好,所以标题几乎没有告诉我的问题。

基本上,我有一个用节点编写的项目,可以做某事。这是一个使用Express,Jade和手写笔的网站。我已经设置了这样的静态内容的路由: app.use(express.static('public'));

该网站工作正常,如果在HTML中,我会这样引用它(例如): link(rel="stylesheet", href="global.css")

正如预期的,当我悬停在Chrome元素查看器中的链接时,URL为localhost/global.css

所以现在我有了这些小项目,我想把它们全部放在一起。它们没有关系,但我想把它们全部放在我的网站上。为此,我制作了一个新的项目,该项目像其他枢纽一样。

在其中,我已经设置了这样的路由:

var proj = require("../proj/server.js");
app.use("/proj ", proj);

,在每个项目中,我都设置了该模块的导出,例如 module.exports = app,其中应用程序是他们各自的Express App Object。

这也像魅力一样工作。我不必在每个项目的单独端口上运行单独的服务器实例。相反,您可以像localhost/proj/

访问它们

现在这是问题开始的地方。每个项目生成的HTML中引用的CSS并不指向localhost/proj/global.css。相反,它仍然指向localhost/global.css。而且由于我的集线器应用程序的公共文件夹中没有global.css,因此找不到它。

当然,我可以将相对URL更改为proj/global.css,而不仅仅是global.css,这确实有效,但这意味着我需要修改所有项目。这也意味着如果我决定更改他们的名字,我还有一个更改的字符串。

此外,URL已经显示了localhost/proj,那么为什么不能自动暗示它在我参考global.css时应该在localhost/proj/global.css中寻找它?

我确定我缺少一些简单的技巧。也许我的相对URL应该有一些额外的内容,说明当前的URL?

编辑:实际上,相对URL似乎可以工作,但前提是地址栏中的地址为localhost/proj/。如果是localhost/proj,则不会。我该怎么做才能强制最后砍伐?

我不知道它是否可以帮助您,但是在Express中,您可以定义几个"公共"目录

router.use(express.static(path.resolve(__dirname, 'client')));
router.use(express.static(path.resolve(__dirname, 'public')));
router.use(express.static(path.resolve(__dirname, 'foo')));

最新更新