2013-07-17 54 views
0

我在過去的幾周內一直在使用節點流,我一直髮現使用一些現成的流模塊更容易(從github/substack,github/mikeal和github/Raynos)比實際直接使用流方法。尋找將其塊轉換爲字符串的nodejs流模塊

有一件事我回避:

什麼是提取出數據可讀流的最簡單的方法,當你知道,有沒有更多的數據來了嗎?

我認爲最簡單的方法是將可讀流寫入一個可寫入的流, 將公開一個方法(或屬性),該方法返回所有已寫入其中的數據。

這裏是我會怎麼用它來提取在催生標準錯誤捕獲的所有數據的例子:從mikeal/morestreams

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-stream,BufferedStream但他們的目標似乎是不同的。

據我所知,捕獲所有這樣的數據並不理想 - 偶爾也是如此。 我也明白,我可以實現我想要的是寫簡單的代碼,要麼

  1. 實現_read函數來捕獲/串聯傳入 塊轉換成字符串
  2. (經典款式)偵聽「數據」來 事件做同樣的
  3. 那張事後流中並加入 塊轉換成字符串

但上述所有的看起來像一個代碼,現在已經有成千上萬人寫過了。希望其中的一個將這些耦合的代碼行抽象成單個模塊函數。或者我可能錯過了一些更簡單的東西 - 正如我所提到的,我仍然不確定自己是否理解了nodejs流。

回答

2

我認爲馬克斯奧格登的node-concat-stream做你所描述的。

+0

你是對的!因此,上面的代碼將變成 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); ' – Diomedes