我正在尝试学习流,并且在使其正常工作方面遇到了一些问题。

对于此示例,我只想将静态对象推送到流中,并将其通过管道传递给服务器响应。

到目前为止,这是我所拥有的,但是很多都行不通。如果我什至可以只将流输出到控制台,就可以弄清楚如何将其通过管道传递给我的响应。

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);

最佳答案

您当前的代码有几个问题。

  • 请求流很可能是缓冲模式流:这意味着您不能向其中写入对象。幸运的是,您没有将选项传递给Readable构造函数,因此您的错误不会造成任何麻烦,但是从语义上来说这是错误的,并且不会产生预期的结果。
  • 您调用Readable的构造函数,但不要继承原型(prototype)属性。您应该使用 util.inherits() 继承Readable
  • 在代码示例的任何地方都没有定义chunk变量。

  • 这是一个工作示例:
    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);
    

    关于javascript - 如何实现基本 Node Stream.Readable示例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20709063/

    10-12 16:36