拥有通过流不管道数据

时间:2012-09-27 13:57:54

标签: node.js stream

我正在学习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函数。为什么会这样?如果我发表评论我的中间管道一切正常!

1 个答案:

答案 0 :(得分:2)

您的代码中有一个可以轻松修复的错误。

module.js更改:

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

为:

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

它会起作用。

此外,如果您想了解有关如何使用流的更多信息,则substack以stream handbook的形式创建了一个很好的资源。