如何实现基本节点Stream.Readable示例?

时间:2013-12-20 17:37:06

标签: javascript node.js stream

我正在尝试学习溪流,并且遇到一些问题让它正常工作。

对于这个例子,我只想将静态对象推送到流并将其传递给我的服务器响应。

这是我到目前为止所做的,但很多都不起作用。如果我甚至可以将流输出到控制台,我可以弄清楚如何将它传递给我的响应。

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

var MyStream = function(options) {
  Readable.call(this);
};

MyStream.prototype._read = function(n) {
  this.push(chunk);
};

var stream = new MyStream({objectMode: true});
s.push({test: true});

request.reply(s);

1 个答案:

答案 0 :(得分:9)

您当前的代码存在一些问题。

  1. 请求流很可能是缓冲模式流:这意味着您无法将对象写入其中。幸运的是,您没有通过Readable构造函数的选项,因此您的错误不会造成任何麻烦,但从语义上讲,这是错误的,不会产生预期的结果。
  2. 您调用Readable的构造函数,但不继承原型属性。您应该使用util.inherits()来继承Readable
  3. chunk变量未在代码示例中的任何位置定义。
  4. 这是一个有效的例子:

    var util = require('util');
    var Readable = require('stream').Readable;
    
    var MyStream = function(options) {
      Readable.call(this, options); // pass through the options to the Readable constructor
      this.counter = 1000;
    };
    
    util.inherits(MyStream, Readable); // inherit the prototype methods
    
    MyStream.prototype._read = function(n) {
      this.push('foobar');
      if (this.counter-- === 0) { // stop the stream
        this.push(null);
      }
    };
    
    var mystream = new MyStream();
    mystream.pipe(process.stdout);