我正在用 node.js 编写一个简单的应用程序,出于某种原因,在尝试提供我的 html 时出现错误“TypeError: path must be absolute or specify root to res.sendFile”页。这个错误不应该发生,因为我使用了一个 express 中间件,它指定了可以找到这个文件的文件夹。那么为什么我会遇到这个问题?
我的应用结构如下所示
MyApp
public
login.html
app.js
我的 html 页面是这样在 app.js 中提供的
var express = require("express");
var app = express();
app.use(express.static("public"));
app.get('/', function(req, res){
res.sendFile("login.html");
});
app.listen(3000);
我知道要解决这个问题,我可以执行“res.sendFile(__dirname + '/public/login.html');”相反,但我不必这样做,因为我使用的是中间件。有什么想法吗?
最佳答案
这一行
app.use(express.static("public"));
并不像你想象的那样!
它不会为每个 Node 函数设置默认文件夹,事实上它不会为其他 Node 函数做任何事情。
它只是说,如果网络服务器收到请求,首先查看该文件夹以查看是否存在这样的文件,如果存在,则提供该文件。
因此,它是静态文件的路径,最常用于 CSS 和 JavaScript 文件,当然还有任何其他不提供动态内容的静态文件。
但是,这一行
res.sendFile("login.html");
在当前工作目录中查找文件 login.html
,或者换句话说,在运行 Node 脚本的位置,它与静态路由没有任何关系,事实上,无论您的脚本在哪里运行,获取该文件的正确方法就是
res.sendFile(__dirname + '/public/login.html');
因为这是正确的路径,sendFile
需要它来查找文件。
关于javascript - Node.js 应用程序不提供没有根路径的静态网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38575365/