我正在node.js中编写一个简单的应用程序,由于某种原因我收到了错误" TypeError:path必须是绝对的或指定root到res.sendFile "当试图提供我的HTML页面时。不应该发生此错误,因为我使用了一个快速中间件来指定可以找到此文件的文件夹。那么为什么我会遇到这个问题?
我的应用结构如下所示
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');"相反,但我不应该因为我使用中间件。有什么想法吗?
答案 0 :(得分:0)
添加为您提供完整路径的功能,让我们调用此功能$
var $=(file)=>`${__dirname}/public/${file}`;
然后:
res.sendFile($("login.html"));
由此,您不需要为每个sendFile
电话手动包含根路径。
答案 1 :(得分:0)
这一行
app.use(express.static("public"));
不按照你的想法行事!
不为每个Node函数设置默认文件夹,实际上它对其他Node函数没有任何作用。
它只是说如果网络服务器收到请求,请首先查看该文件夹以查看是否存在此类文件,如果存在,则提供该文件。
因此,它是静态文件的路径,最常用于CSS和JavaScript文件,当然还有任何其他不提供动态内容的静态文件。
然而,这一行
res.sendFile("login.html");
在当前工作目录中查找文件login.html
,或者换句话说,在你运行Node脚本的地方,它与静态路由没有任何关系,实际上是正确的方法无论你的脚本在哪里运行,都要获取该文件,而这正是
res.sendFile(__dirname + '/public/login.html');
因为这是sendFile
找到文件所需的正确路径。