2012-08-01 94 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報頭(稱爲'範圍'的範圍。例如,'Range:bytes = 0-1023'只能下載第一個KiBi。順便說一句,是不是'res.end()'? – elmigranto 2012-08-01 14:58:50

+1

你可以簡單地res.end(); – Rajat 2012-08-01 17:44:50

+1

不幸的是,res.end()在回調函數中不存在。 – 2012-08-03 14:00:45

回答

14

將其放入文件中並運行。您可能需要調整到本地谷歌,如果你看到谷歌301重定向的答案(被髮送爲單個塊,我相信。)

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(),但在我的一次測試運行中,它仍然發射了一些額外的塊回調。似乎是一個更迫在眉睫的「終點」。

用於破壞方法的文檔是在這裏:http://nodejs.org/api/stream.html#stream_stream_destroy

但是你應該開始閱讀這裏:(其中指出,響應對象實現可讀流接口)http://nodejs.org/api/http.html#http_http_clientresponse

+3

完美! destroy()是一種享受。非常感謝! – 2012-08-03 14:04:06

+3

似乎不再存在。 – 2014-04-24 00:01:13

+0

有沒有一個狀態鍵,我們可以檢查請求是否被破壞? – Tushar 2016-03-24 09:41:05