【问题标题】:Looking for a nodejs stream module that converts its chunks into a string寻找将其块转换为字符串的nodejs流模块
【发布时间】:2013-07-15 11:29:54
【问题描述】:

过去几周我一直在使用节点流,我发现使用一些现成的流模块(来自 github/substack、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-streammikeal/morestreams 的BufferedStream,但它们的目标似乎不同。

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

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

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

【问题讨论】:

    标签: node.js stream


    【解决方案1】:

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

    【讨论】:

    • 你是对的!所以上面的代码会变成 var spawn = require('child_process').spawn, proc = spawn('some_command'), concat = require('concat-stream'); var console_flusher = concat(function(data) {console.log(data); }) proc.stderr.pipe(console_flusher); `
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2013-04-06
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    相关资源
    最近更新 更多