过去几周我一直在使用节点流,我发现使用一些现成的流模块(来自 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,但它们的目标似乎不同。
我知道像这样捕获所有数据并不理想 - 尽管有时是必要的。我也明白我可以通过编写简单的代码来实现我想要的,或者
- 实现 _read 函数以将传入的块捕获/连接成字符串
- (经典风格)监听“数据”事件来做同样的事情
- 事后进入流并将块连接成字符串
但以上所有内容看起来都像是一段代码,到现在为止,成千上万的人已经编写了数千次。希望其中一个将这几行代码抽象为一个模块函数。或者我可能错过了一些更简单的东西——正如我提到的,我仍然对自己理解 nodejs 流没有信心。