3

データを文字列に送信するnodejsストリーム(http://nodejs.org/api/stream.html)の実装が必要です。誰か知っていますか?

直接、次のようなリクエスト応答をパイプしようとしています:request('http://google.com/doodle.png')。pipe(fs.createWriteStream('doodle.png'))

https://github.com/mikeal/requestから

ありがとう

4

2 に答える 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);
于 2012-07-07T19:55:50.640 に答える
5

Sinkこのユースケースでは、モジュール内のクラスpipetteが便利な場合があります。それを使用して、次のように書くことができます。

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

Sinkまた、ストリームから戻ってくるエラーイベントを適切に処理します。詳細については、 https://github.com/Obvious/pipette#sinkを参照してください。

[編集:間違ったイベント名を使用していることに気付いたため。]

于 2012-07-10T19:28:03.460 に答える