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

标签 javascript node.js rest express web-applications

我正在用 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/

相关文章:

java - 为 Spring RestTemplate POST 获取 400 错误请求

c# - Visual Studio 在线销毁文件

rest - 为什么 HTTP 方法 delete 和 put 被认为是幂等的?

javascript - ReactJS 样式组件

node.js - 生成配置模板时如何处理依赖项安装?

node.js - 无法消除 yarn 不正确的对等依赖警告

javascript - 使用套接字或 REST 获取一定时间间隔内多个代币的平均交易量

javascript - 需要所有 native 对象的完整列表

javascript - 正则表达式捕获尽可能多的 Javascript 重定向

javascript - 如何使用变量访问 javascript 对象方法?