16

https.requestnode.js でを使用してリモート ファイルをリクエストしています。ファイル全体を受け取ることには興味がありません。最初のチャンクにあるものが欲しいだけです。

var req = https.request(options, function (res) {
    res.setEncoding('utf8');

    res.on('data', function (d) {
         console.log(d);
         res.pause(); // I want this to end instead of pausing
    });
});

最初のチャンクの後に応答の受信を完全に停止したいのですが、close または end メソッドは表示されず、一時停止と再開のみです。一時停止を使用する私の心配は、この応答への参照が無期限にぶらぶらしていることです。

何か案は?

4

1 に答える 1

16

これをファイルにポップして実行します。Google からの 301 リダイレクト応答が表示された場合は、ローカルの Google に調整する必要があるかもしれません (これは単一のチャンクとして送信されると思います)。

var http = require('http');

var req = http.get("http://www.google.co.za/", function(res) {
  res.setEncoding();
  res.on('data', function(chunk) {
    console.log(chunk.length);
    res.destroy(); //After one run, uncomment this.
  });
});

それがres.destroy()実際に機能することを確認するには、コメントを外します。応答オブジェクトは、それ自体を閉じるまで (ノードがこのスクリプトを終了する時点で) イベントを発行し続けます。

res.emit('end');の代わりに も試してみましdestroy()たが、テストの実行中に、まだいくつかの追加のチャンク コールバックが発生しました。destroy()より差し迫った「終わり」のようです。

destroy メソッドのドキュメントはこちら: http://nodejs.org/api/stream.html#stream_stream_destroy

ただし、ここから読み始める必要があります: http://nodejs.org/api/http.html#http_http_clientresponse (応答オブジェクトが読み取り可能なストリーム インターフェイスを実装することを示しています)。

于 2012-08-01T23:27:39.680 に答える