Estoy tratando de crear un servidor de archivos estático en nodejs más como un ejercicio para entender el nodo que como un servidor perfecto. Soy consciente de proyectos como Connect y node-static y tengo la intención de usar esas bibliotecas para obtener más código listo para producción, pero también me gusta comprender los conceptos básicos de lo que estoy trabajando. Con eso en mente, he codificado un pequeño server.js:
var http = require('http'),
url = require('url'),
path = require('path'),
fs = require('fs');
var mimeTypes = {
"html": "text/html",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"};
http.createServer(function(req, res) {
var uri = url.parse(req.url).pathname;
var filename = path.join(process.cwd(), uri);
path.exists(filename, function(exists) {
if(!exists) {
console.log("not exists: " + filename);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('404 Not Found\n');
res.end();
}
var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
res.writeHead(200, mimeType);
var fileStream = fs.createReadStream(filename);
fileStream.pipe(res);
}); //end path.exists
}).listen(1337);
Mi pregunta es doble
¿Es esta la forma "correcta" de crear y transmitir html básico, etc. en el nodo o hay un método mejor / más elegante / más robusto?
¿El .pipe () en el nodo básicamente está haciendo lo siguiente?
.
var fileStream = fs.createReadStream(filename);
fileStream.on('data', function (data) {
res.write(data);
});
fileStream.on('end', function() {
res.end();
});
¡Gracias a todos!