2012-07-07 50 views

回答

5

您可能會發現類Sinkpipette模塊中適合完成這個用例。使用,你可以寫:

var sink = new pipette.Sink(request(...)); 
sink.on('data', function(buffer) { 
    console.log(buffer.toString()); 
} 

Sink也處理從流回來合理正常的錯誤事件。詳細信息請參見https://github.com/Obvious/pipette#sink

[編輯:因爲我意識到我使用了錯誤的事件名稱。]

+0

這是一個非常漂亮的模塊! – 2012-07-12 16:49:01

+0

@BrandonTilley:謝謝! – danfuzz 2012-07-15 18:15:24

+0

**爲**'吸管'**。我喜歡使用它。 (雖然我的狗沒有) – 2012-07-26 11:47:41

11

它不會是很難寫出一個符合流接口的類;這裏是一個實現了非常基礎,而且似乎與你鏈接的請求模塊工作的一個例子:

var stream = require('stream'); 
var util = require('util'); 
var request = require('request'); 

function StringStream() { 
    stream.Stream.call(this); 
    this.writable = true; 
    this.buffer = ""; 
}; 
util.inherits(StringStream, stream.Stream); 

StringStream.prototype.write = function(data) { 
    if (data && data.length) 
    this.buffer += data.toString(); 
}; 

StringStream.prototype.end = function(data) { 
    this.write(data); 
    this.emit('end'); 
}; 

StringStream.prototype.toString = function() { 
    return this.buffer; 
}; 


var s = new StringStream(); 
s.on('end', function() { 
    console.log(this.toString()); 
}); 
request('http://google.com').pipe(s); 
+0

偉大的學習如何實現它的權利。非常感謝。 – Samuel 2012-07-12 13:19:14