J'essaie de comprendre ce qui se passe de manière synchrone ou asynchrone dans Node.js, en particulier pour lire un fichier html.
Dans un gestionnaire de demandes, la version synchrone que j'utilise, qui fonctionne est la suivante:
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;
Edit: j'ai essayé de refactoriser le code comme ceci:
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();
}
Je reçois une page blanche, je suppose que c’est parce qu’il faut attendre que toutes les données aient été lues, avant d’écrire (données), comment puis-je le signaler?
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();
});
}
Cette variante est préférable car vous ne pouvez pas savoir si le fichier existe ou non. Vous devez envoyer un en-tête correct lorsque vous êtes certain de pouvoir lire le contenu de votre fichier. De plus, si vous avez des branches de code qui ne finissent pas par '.end ()', le navigateur attendra de les avoir. En d'autres termes, votre navigateur attendra longtemps.
var fs = require("fs");
var filename = "./index.html";
function start(resp) {
fs.readFile(filename, "utf8", function(err, data) {
if (err) {
// may be filename does not exists?
resp.writeHead(404, {
'Content-Type' : 'text/html'
});
// log this error into browser
resp.write(err.toString());
resp.end();
} else {
resp.writeHead(200, {
"Content-Type": "text/html"
});
resp.write(data.toString());
resp.end();
}
});
}