通过nodejs中间件路由某些请求子集时,HTML中的相对URL

时间:2014-01-29 18:19:53

标签: html node.js express

好的,所以标题很少说明我的问题。

基本上,我有一个用节点编写的项目。这是一个使用快递,玉石和手写笔的网站。我已经设置了静态内容的路由,如下所示: app.use(express.static('public'));

如果在HTML中我像这样引用它(例如),网站工作正常并且所有CSS都正确加载: link(rel="stylesheet", href="global.css")

正如预期的那样,当我将鼠标悬停在Chrome的元素查看器中的链接上时,该网址为localhost/global.css

所以现在我有一些这样的小项目,我想把它们放在一起。它们没有关联,但我想将它们全部放在我的网站上。为此,我创建了一个新项目,服务器就像其他服务器的集线器一样。

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

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

并且在每个项目中我都设置了模块导出,如module.exports = app,其中app是各自的快速应用对象。

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

那样访问它们

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

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

此外,该网址已经显示localhost/proj,为什么不能自动暗示当我引用global.css时应该在localhost/proj/global.css中查找?

我确信我有一些简单的伎俩。也许我的相对URL应该有一些额外的东西,说它引用了当前的URL?

编辑: 实际上,相对URL似乎有效,但前提是地址栏中的地址为localhost/proj/。如果它是localhost/proj则没有。我该怎么做才能强制进行最后一次斜线?

1 个答案:

答案 0 :(得分:0)

我不知道它是否可以帮到你,但是在快递方面,你可以定义几个" public"目录

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