Bondifrench Bondifrench - 3 months ago 15
Node.js Question

Node.js from fs.readFileSync() to fs.readFile()

I'm trying to get my head around synchronous vs asynchronous in Node.js, in particular for reading an html file.

In a request handler, the synchronous version that i'm using, which works is the following:

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. What would be the version using readFile() ??

  2. I understand that readFile is asynchronous so theoretically I should wait that
    the entire file is read before rendering it, so should I introduce
    an addListener? I might be confusing different things.



Edit: I have tried to refactor the code like this:

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();
}


I get a blank page, I guess it's because it should wait that all the data has been read, before resp.write(data), how do i signal this?

Answer
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();
    });
}
Comments