2012-09-27 67 views
2

我正在學習有關node.js流,因此我想寫我自己的自定義流模塊。以下是我目前所面對的:自己通過流不管數據

index.js:

fs = require("fs") 
var module = require("./module") 
var ws = fs.createWriteStream("out.txt") 

fs.createReadStream("in.txt") 
    .pipe(module()) 
    .pipe(ws) 

module.js:

var Stream = require('stream').Stream; 

module.exports = function() { 
    var stream = new Stream(); 

    this.writable = true; 
    this.readable = true; 

    stream.write = function(data) { 
    console.log("write") 
    stream.emit("data", data) 
    } 

    stream.end = function() { 
    console.log("end") 
    stream.emit("end") 
    } 

    stream.destroy = function() { 
    console.log("destroy") 
    stream.emit("close") 
    } 

    return stream; 
} 

in.txt:

text 
text 
text 
text 
text 
text 
text 
text 
text 
text 

的問題是, out.txt是空的,並且stream.write函數從不被調用。爲什麼?如果我註釋掉我的中間管道都行得通!

回答

2

代碼中存在一個可以輕鬆修復的錯誤。

module.js變化:

this.writable = true; 
this.readable = true; 

到:

stream.writable = true; 
stream.readable = true; 

,它會工作。

此外,如果你想了解更多關於如何使用流,substack創建了一個很好的資源,形式爲stream handbook

+0

哦,男孩,我是盲人!謝謝!我已閱讀手冊,無論如何感謝鏈接。我在編寫模塊時閱讀了不同的資源。似乎我混合了幾種方法。 – zemirco

+0

我以爲是這樣。 ...如果您從Stream繼承並在構造函數內部設置了它們,那麼這個方法就行得通。 –