如何解决为什么我需要为 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 举报,一经查实,本站将立刻删除。