微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

假设我的 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("/",res) {
  res.sendFile(__dirname + "/index.html");
});

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

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

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。