我在過去的幾周內一直在使用節點流,我一直髮現使用一些現成的流模塊更容易(從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但他們的目標似乎是不同的。
據我所知,捕獲所有這樣的數據並不理想 - 偶爾也是如此。 我也明白,我可以實現我想要的是寫簡單的代碼,要麼
- 實現_read函數來捕獲/串聯傳入 塊轉換成字符串
- (經典款式)偵聽「數據」來 事件做同樣的
- 那張事後流中並加入 塊轉換成字符串
但上述所有的看起來像一個代碼,現在已經有成千上萬人寫過了。希望其中的一個將這些耦合的代碼行抽象成單個模塊函數。或者我可能錯過了一些更簡單的東西 - 正如我所提到的,我仍然不確定自己是否理解了nodejs流。
你是對的!因此,上面的代碼將變成 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