如何在节点应用程序中使用fs读取文件?

时间:2017-10-28 13:06:45

标签: javascript node.js http fs

我想使用fs模块在nodejs中读取此文件。 我得到了两次回复。让我知道我做错了什么。这是我的代码。

var http = require("http");
var fs = require("fs");

http.createServer(function(req, res) {
  fs.readFile('sample.txt', function(err, sampleData) {
    console.log(String(sampleData));
    //res.end();
    });
  console.log("The end");
  // res.writeHead(200);
  res.end();
}).listen(2000);

在浏览器中点击端口后。我在终端上收到两次回复。这是输出。

The end
this is sample text for the testing.

The end
this is sample text for the testing.

4 个答案:

答案 0 :(得分:3)

由于您是从浏览器访问http://localhost:2000/,因此您最有可能获得两次。

这样做时实际上有两个请求。您的实际请求和favicon :)这两者都由您的服务器处理。

查看Chrome调试器 - >网络

enter image description here

答案 1 :(得分:2)

将显示两条日志消息:一条用于/和一条用于/favicon.ico

您可以通过添加console.log(req.url);

来验证这一点

为避免这种情况:

    var http = require("http");
    var fs = require("fs");

    http.createServer(function(req, res){
    if(req.url === '/'){  // or if(req.url != '/faicon.ico'){
        fs.readFile('sample.txt', function(err , sampleData){
            console.log(String(sampleData));
            res.end();
        });
    console.log("The end");
    }

    // res.writeHead(200);
}).listen(2000);

答案 2 :(得分:1)

自动向favicon.io发出请求。 为避免对favicon的自动请求,您可以执行以下操作

http.createServer(function(req, res){
    if(req.url != '/favicon.ico'){
        fs.readFile('sample.txt', function(err , sampleData){
            console.log(String(sampleData));
            res.end();
        });
       console.log("The end");
    }

}).listen(2000);

O / p =>

The end.
this is sample text for the testing.

答案 3 :(得分:0)

您可以文件传输到客户端:

fs.createReadStream('sample.txt').pipe(res);