过去几周我一直在使用节点流,我发现使用一些现成的流模块(来自github/subsack、github/mikeal和github/Raynos)比直接使用流方法更容易。
有一件事瞒着我:
当您知道没有更多数据时,从可读流中提取数据的最简单方法是什么?
我认为最简单的方法是将可读流管道传输到可写流中将公开一个方法(或属性),该方法返回已写入其中的所有数据
下面是一个示例,说明如何使用它来提取派生stderr:中捕获的所有数据
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()); }
我看过Raynos/buffer流,mikeal/morestreams的BufferedStream,但它们的目标似乎不同。
我知道捕获所有这样的数据并不理想——偶尔也有必要。我也明白,我可以通过写简单的代码来实现我想要的,无论是
- 实现_read函数来捕获/连接传入的成串的块
- (经典风格)监听"数据"事件做同样的事
- 在事后加入成串的块
但以上所有内容似乎都是一个代码,到目前为止,成千上万的人一定已经写了数千次了。希望其中一个能将这两行代码抽象成一个模块函数。或者,我可能错过了一些更简单的东西——正如我所提到的,我仍然对自己理解nodejs流没有信心。
我认为Max Ogden的节点连接流符合您的描述。