Estoy haciendo ejercicios de node.js de nodeschool.io (learnyounode). Uno de los ejercicios consiste en crear un servidor http que sirva un archivo de texto desde un flujo de archivos legibles. Soy muy nuevo en la programación asíncrona. La solución que se me ocurrió es:
var http = require('http'); var fs = require('fs'); var readable = fs.createReadStream(process.argv[3]); var server = http.createServer(function(request, response) { readable.on('data', function(chunk) { response.write(chunk); }) }); server.listen(process.argv[2]);
Esto funciona, sin embargo, la solución oficial usa una canalización en lugar de un evento en los datos:
var http = require('http') var fs = require('fs') var server = http.createServer(function (req, res) { res.writeHead(200, { 'content-type': 'text/plain' }) fs.createReadStream(process.argv[3]).pipe(res); }) server.listen(Number(process.argv[2]))
¿Cuáles son las diferencias (potenciales) y/o los beneficios de hacerlo de cualquier manera?
Bueno, hay más código en su versión y eso generalmente significa que tiene más opciones para cometer errores. Tenga en cuenta algunos casos extremos, como ¿qué sucede cuando la transmisión arroja un error?
No estoy exactamente seguro de cuál sería el comportamiento (puede verificarlo usted mismo, por ejemplo, insertando un nombre de archivo que no existe), pero es probable que en su versión el manejo de errores no funcione muy bien, ignorando potencialmente los errores (porque no está escuchar eventos de error).