node.js - open - readfilesync example
Node.js de fs.readFileSync() a fs.readFile() (2)
Esta variante es mejor porque no se puede saber si el archivo existe o no. Debe enviar el encabezado correcto cuando sepa con certeza que puede leer el contenido de su archivo. Además, si tiene ramas de código que no terminan con ''.end ()'', el navegador esperará hasta que las obtenga. En otras palabras, su navegador esperará mucho tiempo.
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();
}
});
}
Estoy tratando de encontrarme sincrónico vs asíncrono en Node.js, en particular para leer un archivo html.
En un controlador de solicitud, la versión síncrona que estoy usando, que funciona es la siguiente:
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;
- ¿Cuál sería la versión usando readFile ()?
- Entiendo que readFile es asíncrono, por lo que, en teoría, debo esperar a que se lea el archivo completo antes de representarlo, así que ¿debo presentar un addListener? Podría estar confundiendo cosas diferentes.
Editar: He tratado de refactorizar el código de esta manera:
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();
}
Obtengo una página en blanco, supongo que es porque debería esperar a que se hayan leído todos los datos, antes de resp.write (datos), ¿cómo señalo esto?
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();
});
}