Подтвердить что ты не робот

Как закончить node.js http-запрос раньше

Я запрашиваю удаленный файл с помощью https.request в node.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
    });
});

Я хочу прекратить получать ответ вообще после первого фрагмента, но я не вижу никаких близких или конечных методов, только пауза и возобновление. Мое беспокойство, использующее паузу, заключается в том, что ссылка на этот ответ будет висит бесконечно.

Любые идеи?

4b9b3361

Ответ 1

Поместите это в файл и запустите его. Возможно, вам придется приспособиться к локальному 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() действительно работает, раскомментирует его, и объект ответа будет продолжать излучать события до тех пор, пока он не закроется (в этот момент node выйдет из этого script).

Я также экспериментировал с res.emit('end'); вместо destroy(), но во время одного из моих тестовых прогонов он по-прежнему запускал несколько дополнительных обратных вызовов. destroy() кажется более неминуемым "концом".

Документы для метода destroy: http://nodejs.org/api/stream.html#stream_stream_destroy

Но вы должны начать читать здесь: http://nodejs.org/api/http.html#http_http_clientresponse (в котором говорится, что объект ответа реализует интерфейс считываемого потока.)