【问题标题】:Javascript String nodejs stream implementationJavascript String nodejs流实现
【发布时间】:2012-07-07 19:35:00
【问题描述】:

我需要一个将数据发送到字符串的 nodejs 流 (http://nodejs.org/api/stream.html) 实现。你认识任何人吗?

直截了当,我试图通过管道发送这样的请求响应: request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))

来自https://github.com/mikeal/request

谢谢

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    写一个符合Stream接口的类并不难;这是一个实现非常基础的示例,并且似乎可以与您链接的请求模块一起使用:

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

    【讨论】:

      【解决方案2】:

      您可能会发现 pipette 模块中的类 Sink 对这个用例很方便。使用它你可以写:

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

      Sink 还可以相当优雅地处理从流返回的错误事件。详情请见https://github.com/Obvious/pipette#sink

      [编辑:因为我意识到我使用了错误的事件名称。]

      【讨论】:

      • +1 表示 pipette。我喜欢用它。 (不过我的狗没有)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 2014-04-09
      • 1970-01-01
      • 2018-10-28
      • 2023-04-02
      • 1970-01-01
      • 2017-09-18
      相关资源
      最近更新 更多