【问题标题】:How to force Express JS to serve files from the same directory regardless of route? [closed]无论路由如何,如何强制 Express JS 从同一目录提供文件? [关闭]
【发布时间】:2021-02-15 22:41:59
【问题描述】:

我正在编写一个使用名为 Handlebars 的模板引擎的快速应用程序。它提供的 html 文件包含指向我根目录中某些位置的图像。这适用于诸如“http://localhost:5000/image”或“http://localhost:5000/login”之类的表面级路由。但是,当我转到更深的路径(例如“http://localhost:5000/image/1”)时,所有图像都指向我根目录中不存在的“/image”文件夹。此处展示的屏幕截图:

如何强制我的页面只指向我的根目录,而不管用户在哪个路由中?我不能简单地更改 html 文件中的 src,因为我使用的模板引擎提供相同的横幅图像,而不管用户在哪个页面上。

这是我的代码

【问题讨论】:

标签: javascript node.js express handlebars.js express-handlebars


【解决方案1】:

看起来您在模板中使用了相对路径。由于您使用express.static 提供根目录中的文件,请尝试将图像路径更改为绝对路径(以/ 开头):

<img src="/assets/path/to/your-image.png">

【讨论】:

  • 你给出的例子是我目前的做法。你是说我必须使用 localhost:5000/path/img.png> 而不是 如果是这样,我可以忍受。感谢您的帮助
  • @Melissa — “你举的例子就是我目前的做法。”不,不是。您已经发布了屏幕截图。我们可以看到这不是你的做法。
【解决方案2】:

你正在从这个方向接近这个。

目前您在 HTML 中使用相对路径。 &lt;img src="assets/etc…

通过获取基本 URL(通常是当前 HTML 文档的路径)、删除片段 ID、查询字符串以及最后一个 / 之后的所有内容,然后附加相对路径来解决这些问题。

因此,解析后的路径将根据您正在查看的 HTML 文档的 URL 发生变化。


可以按照您的要求编写代码,以便:

/assets/foo
/something/assets/foo
/something-else/assets/foo
/something/something/assets/foo

所有人都为您提供相同的资源。

但是:

  • 这会破坏该资源的缓存
  • 写起来会很痛苦
  • 您可能会在搜索引擎中受到重复内容处罚

所以不要那样做


相反,为资源选择一个 URL 并更改 HTML,以便您始终要求相同的 URL。

使用以/ 开头的绝对路径

它们以与相对 URL 类似的方式解析,但不是删除最后一个 / 之后的所有内容,而是删除主机名(和可选端口号)之后的所有内容。

<img src="/assets/etc…

【讨论】:

    【解决方案3】:

    为静态文件指定一个单独的目录。然后始终将它们称为绝对路径。

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 2019-08-09
      • 1970-01-01
      • 2021-02-24
      • 2018-05-12
      • 2014-04-19
      • 2012-04-27
      • 1970-01-01
      • 2016-11-07
      相关资源
      最近更新 更多