一尘不染

从fs.readFileSync()到fs.readFile()的Node.js

node.js

我正在努力使自己在Node.js中实现同步与异步,尤其是在读取html文件时。

在请求处理程序中,可以使用的同步版本如下:

var fs = require("fs");
var filename = "./index.html";
var buf = fs.readFileSync(filename, "utf8");

function start(resp) {
    resp.writeHead(200, {"Content-type":"text/html"});
    resp.write(buf);
    resp.end();
    }

exports.start=start;
  1. 使用readFile()的版本是什么?
  2. 我了解readFile是异步的,因此从理论上讲,我应该等待整个文件读取后再呈现,因此我应该引入addListener吗?我可能会混淆其他事情。

编辑:我试图重构这样的代码:

var fs = require("fs");
var filename = "./index.html";
function start (resp) {
    resp.writeHead(200, {"Content-Type":"text/html"});
    fs.readFile(filename, "utf8", function (err, data) {
        if (err) throw err;
        resp.write(data);
        });
    resp.end();
    }

我得到一个空白页,我想这是因为它应该等待所有数据已被读取,然后再resp.write(data),我该如何发信号呢?


阅读 241

收藏
2020-07-07

共1个答案

一尘不染

var fs = require("fs");
var filename = "./index.html";

function start(resp) {
    resp.writeHead(200, {
        "Content-Type": "text/html"
    });
    fs.readFile(filename, "utf8", function(err, data) {
        if (err) throw err;
        resp.write(data);
        resp.end();
    });
}
2020-07-07