假设我的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模块的位置,当您将它们捆绑在一起时,该模块总是相对于静态文件处于相同的位置。