【问题标题】:Node.js - readstream returning ENOENT(errornr #4058)Node.js - 读取流返回 ENOENT(errornr #4058)
【发布时间】:2020-10-26 10:55:47
【问题描述】:

我试图从我的节点应用程序中显示一个 html 文件。这是我的代码:

var http = require('http');
var fs = require ('fs');
var path = require("path");
var filePath = path.normalize('/NodeJS/projects/test.html');   


var server = http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type' : 'text/html'});
    var myReadStream = fs.createReadStream(filePath);    

    myReadStream.pipe(res);
});

server.listen(3000, '127.0.0.1');
console.log('listening to port 3000');

我之前在尝试使用 __dirname 时遇到了同样的问题,但它不起作用,所以我想尝试使用 path.normalize。 关于为什么这不起作用的任何指针。如果我将控制台错误中的目录复制到我的资源管理器中,我的 test.html 文件将打开....该文件就在那里。这一定是一些简单的错误,但它杀死了我

【问题讨论】:

  • 我有几乎同样的问题。但是对于作为 Windows 服务安装的我来说,它无法加载文件。但通常使用 node server.js 它可以工作。

标签: javascript html node.js path


【解决方案1】:

我认为这可以通过更简单的方式完成。

我的文件在根文件夹中

path.normalize() 方法规范化给定路径,解析 ... 段。

path.normalize('/foo/bar//baz/asdf/quux/..');
// Returns: '/foo/bar/baz/asdf
var http = require('http'),
    fs = require('fs');
var path = require("path");
var filePath = path.normalize('./index.html');

console.log(filePath)
//here you can include your HTML file
fs.readFile(filePath, function (err, html) {
    if (err) {
        throw err; 
    }       
    http.createServer(function(request, response) {  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(html);  
        response.end();  
    }).listen(3000);
});

【讨论】:

  • 看起来确实简单多了,更像我之前尝试过的。我仍然遇到同样的问题。 [错误:ENOENT:没有这样的文件或目录,打开 'D:\NodeJS\projects\test.html']
  • 我的意思是我明白了,但如何? test.html 在我导航到的文件夹内。我试图理解这个简单的错误,但我看不出它是如何走错路的。如果我打开 NodeJS/projects/ 我的 test.html 就在那里
  • 更新了我的答案以获取有关规范化的更多信息
  • 我明白这一点。但由于它与我的 app.js 在同一个文件夹中,一个简单的 path.normalize('./test.html) 应该可以解决问题吗?但它不起作用。我无法理解为什么。
猜你喜欢
  • 2016-12-12
  • 2013-04-04
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
相关资源
最近更新 更多