2012-08-01 11 views
12

node.jsにhttps.requestを使用してリモートファイルをリクエストしています。私は全体のファイルを受け取ることに興味がない、私はちょうど最初の塊に何が欲しい。node.jsのHTTPリクエストを早く終了する方法

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

私は最初のチャンクの後に完全に応答の受信を停止したいが、私は一時停止と再開のみで、任意のクローズまたは終了する方法が表示されません。一時停止を使用している私の心配は、この応答への参照が無限にぶら下がります。

アイデア?

+0

[HTTPヘッダー]があります( http://en.wikipedia.org/wiki/List_of_HTTP_header_fields)は「Range」と呼ばれています。たとえば、最初のKiBiのみをダウンロードするには、「Range:bytes = 0-1023」と入力します。ところで、 'res.end()'はありませんか? – elmigranto

+1

あなたは単にres.end(); – Rajat

+1

悲しいことに、res.end()はコールバック関数内に存在しません。 –

答えて

14

これをファイルにポップして実行します。あなたが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()が実際に動作することを確認するには、コメントを外し、それは、と応答オブジェクトは、自身を閉じるまで(ノードがこのスクリプトを終了するまで)イベントを送出し続けます。

私はdestroy()の代わりにres.emit('end');と実験しましたが、私のテストランの1つの間に、チャンクコールバックがさらにいくつか発生しました。 destroy()は、より差し迫った「終わり」のようです。

破壊する方法についてのドキュメントはここにある:http://nodejs.org/api/stream.html#stream_stream_destroy

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

+3

パーフェクト! destroy()は処理を行います。どうもありがとう! –

+3

はもう存在しないようです。 –

+0

要求が破棄されたかどうかを確認できるステータスキーはありますか? – Tushar

関連する問題