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



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

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

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

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

然而,在index.js中,当我的express服务器接收到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中指定一个相对路径时,文件系统的行为不一样?

注意:我理解另一种方式是指定根。然而,问题的要点是为什么我必须使用绝对路径而不是相对路径(为什么会出现错误?)

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

  • 可能是您的Node.js项目的根(而不是该项目中静态文件的根)在您的开发环境
  • 可能在某个地方(a)不同,(b)当你有一个生产环境(可能通过PM2通过systemd或AWS lambda函数启动它)时不太有用

使用__dirname计算绝对路径意味着您显式地使其相对于JS模块的位置,当您将它们捆绑在一起时,该模块总是相对于静态文件处于相同的位置。

相关内容

最新更新