Javascript Node.js-将可读流传送到http响应

Javascript Node.js-将可读流传送到http响应,javascript,node.js,asynchronous,stream,fs,Javascript,Node.js,Asynchronous,Stream,Fs,我正在nodeschool.io(learnyounode)上做node.js练习。其中一个练习涉及创建一个http服务器,该服务器从一个可读的文件流中提供一个文本文件。我对异步编程非常陌生。我提出的解决方案是: var http = require('http'); var fs = require('fs'); var readable = fs.createReadStream(process.argv[3]); var server = http.createServer(functi

我正在nodeschool.io(learnyounode)上做node.js练习。其中一个练习涉及创建一个http服务器,该服务器从一个可读的文件流中提供一个文本文件。我对异步编程非常陌生。我提出的解决方案是:

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]);
这是可行的,但是官方解决方案使用管道而不是数据事件:

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]))

这两种方法的(潜在)区别和/或好处是什么?

好吧,你的版本中有更多的代码,这通常意味着你有更多的选择来犯错。考虑一些边缘情况,比如流抛出错误时会发生什么

我不确定这种行为会是什么(您可以通过插入一些不存在的文件名来检查自己),但在您的版本中,错误处理可能工作得不太好,可能会忽略错误(因为您没有侦听错误事件)