Node.js - 将可读流传递给http响应

时间:2017-04-26 21:45:09

标签: 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(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]))

以这两种方式做到这一点的(潜在)差异和/或好处是什么?

1 个答案:

答案 0 :(得分:0)

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

我不确定行为会是什么(您可以通过插入一些不存在的文件名来检查自己)但很可能在您的版本中错误处理效果不佳,可能会忽略错误(因为您'不是在听错误事件。)