Node.js应用程序没有提供没有根路径的静态网页

时间:2016-07-25 18:50:00

标签: javascript node.js rest express web-applications

我正在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');"相反,但我不应该因为我使用中间件。有什么想法吗?

2 个答案:

答案 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找到文件所需的正确路径。