为什么我需要为 res.sendFile() 指定一个绝对路径而不是相对路径?

时间:2021-03-01 11:07:07

标签: javascript express http path web-development-server

假设我的 index.js 与我的 index.html 位于同一目录中。还有一个包含styles.css的文件夹css。

/
  |- index.js
  |- index.html
  |- css/styles.css

在 index.html 中,我可以使用相对路径指定我的 css 样式,它会指向相对于我的 index.html 的 css/styles.css

  <link rel="stylesheet" href="css/styles.css">

但是,在 index.js 中,当我的快递服务器收到 GET 请求而不是

app.get("/", function(req, res) {
  res.sendFile("index.html"); // type Error
});

我必须指定一个绝对路径

app.get("/", function(req, res) {
  res.sendFile(__dirname + "/index.html");
});

考虑 index.html 能够正确定位(显示无错误)相对路径 css/styles.css 时的行为。为什么同样的逻辑不能应用于 index.js ?

为什么文件系统的行为与我在 index.html 中指定相对路径时的行为不同?

注意:我知道另一种方法是指定一个根。但是,问题的要点是为什么我必须使用绝对路径而不是相对路径(为什么会出错?)

1 个答案:

答案 0 :(得分:0)

您可以使用相对路径。路径只是从当前工作目录解析出来的:

  • 可能是开发环境中 Node.js 项目的根目录(而不是该项目中静态文件的根目录)
  • 当您拥有生产环境(可能通过 systemd 通过 PM2 启动它或作为 AWS lambda 函数)时,可能会出现 (a) 不同和 (b) 不太有用的地方

使用 __dirname 计算绝对路径意味着您明确地使其相对于 JS 模块的位置,当您将它们捆绑在一起时,该位置始终相对于静态文件位于同一位置。< /p>