JavaScript字符串Node.js流实现

3
我需要一个将数据发送到字符串的nodejs流(http://nodejs.org/api/stream.html)实现。你认识这样的人吗?
直接说,我正在尝试像这样传输请求响应: request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
来自https://github.com/mikeal/request 谢谢
2个回答

11

编写一个符合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);

5
你可能会发现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**。我喜欢使用它。(尽管我的狗不喜欢) - Alba Mendez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接