0

过去几周我一直在使用节点流,我发现使用一些现成的流模块(来自 github/substack、github/mikeal 和 github/Raynos)比直接使用流方法更容易。

有一件事让我回避:

当您知道没有更多数据到来时,从可读流中提取数据的最简单方法是什么?

我认为最简单的方法是将可读流传输到可写流中,该流将公开一个方法(或属性),该方法(或属性)返回已写入的所有数据。

这是我如何使用它来提取生成的标准错误中捕获的所有数据的示例:

var spawn = require('child_process').spawn,
    proc = spawn('some_command'),
    plug = require('the-stream-module-i-am-looking-for');

buffer = plug.buffer();
proc.stderr.pipe(buffer);
proc.on('exit', function() { console.log(buffer.getdata()); }

我查看了来自mikeal/morestreams的Raynos/buffer-stream和 BufferedStream,但它们的目标似乎不同。

我知道像这样捕获所有数据并不理想 - 尽管有时是必要的。我也明白我可以通过编写简单的代码来实现我想要的,或者

  1. 实现 _read 函数以将传入的块捕获/连接成字符串
  2. (经典风格)监听“数据”事件来做同样的事情
  3. 事后进入流并将块连接成字符串

但以上所有内容看起来都像是一段代码,到现在为止,成千上万的人已经编写了数千次。希望其中一个将这几行代码抽象为一个模块函数。或者我可能错过了一些更简单的东西——正如我提到的,我仍然对自己理解 nodejs 流没有信心。

4

1 回答 1

2

我认为 Max Ogden 的node-concat-stream符合您的描述。

于 2013-07-17T04:49:06.783 回答