我需要一个将数据发送到字符串的 nodejs 流 (http://nodejs.org/api/stream.html) 实现。你认识任何人吗?
直截了当,我试图通过管道发送这样的请求响应: request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
来自https://github.com/mikeal/request
谢谢
我需要一个将数据发送到字符串的 nodejs 流 (http://nodejs.org/api/stream.html) 实现。你认识任何人吗?
直截了当,我试图通过管道发送这样的请求响应: request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
来自https://github.com/mikeal/request
谢谢
编写一个符合 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);
您可能会发现模块中的类Sink
对于pipette
这个用例很方便。使用它,您可以编写:
var sink = new pipette.Sink(request(...));
sink.on('data', function(buffer) {
console.log(buffer.toString());
}
Sink
还可以相当优雅地处理从流中返回的错误事件。有关详细信息,请参阅https://github.com/Obvious/pipette#sink。
[编辑:因为我意识到我使用了错误的事件名称。]