2013-04-24 17 views
5

Jak możemy zatrzymać pozostałą odpowiedź z serwera - Na przykład.Zatrzymaj pobieranie danych w żądaniu nodejs

http.get(requestOptions, function(response){ 

//Log the file size; 
console.log('File Size:', response.headers['content-length']); 

// Some code to download the remaining part of the response? 

}).on('error', onError); 

Chcę tylko zarejestrować rozmiar pliku i nie marnować mojej przepustowości na pobieranie pozostałego pliku. Czy nodejs automatycznie to obsługuje, czy też muszę napisać dla niego specjalny kod?

Odpowiedz

9

Jeśli chcesz po prostu pobrać rozmiar pliku, najlepiej jest użyć HTTP HEAD, który zwraca tylko nagłówki odpowiedzi z serwera bez treści.

Można złożyć wniosek głowę w node.js takiego:

var http = require("http"), 
    // make the request over HTTP HEAD 
    // which will only return the headers 
    requestOpts = { 
    host: "www.google.com", 
    port: 80, 
    path: "/images/srpr/logo4w.png", 
    method: "HEAD" 
}; 

var request = http.request(requestOpts, function (response) { 
    console.log("Response headers:", response.headers); 
    console.log("File size:", response.headers["content-length"]); 
}); 

request.on("error", function (err) { 
    console.log(err); 
}); 

// send the request 
request.end(); 

EDIT:

zdałem sobie sprawę, że nie naprawdę odpowiedzieć na pytanie, co jest w istocie „Jak zrobić Na wczesnym etapie Node.js kończę żądanie? ". można rozwiązać każdy wniosek w środku przetwarzanie przez wywołanie response.destroy():

var request = http.get("http://www.google.com/images/srpr/logo4w.png", function (response) { 
    console.log("Response headers:", response.headers); 

    // terminate request early by calling destroy() 
    // this should only fire the data event only once before terminating 
    response.destroy(); 

    response.on("data", function (chunk) { 
     console.log("received data chunk:", chunk); 
    }); 
}); 

Można to sprawdzić przez zakomentowałeś się zniszczyć() rozmowę i obserwację, że w pełnym wnioskiem zwracane są dwa kawałki. Jak wspomniano w innym miejscu, bardziej efektywne jest użycie HTTP HEAD.

+0

Dzięki za odpowiedź. Czym różni się on od metody response.end() i kiedy powinienem go użyć? – Tushar

+0

Jeszcze jedno, jeśli nie przywiążę słuchacza do zdarzenia "data", czy dane będą nadal przesyłane? Mam na myśli, że moja przepustowość zostanie niepotrzebnie zmarnowana? – Tushar

+0

Tak, dane będą nadal wysyłane do klienta, nawet jeśli nie zajmiesz się zdarzeniem "data". –

3

Trzeba wykonać HEAD żądanie zamiast dostać

Zrobione z this answer

var http = require('http'); 
var options = { 
    method: 'HEAD', 
    host: 'stackoverflow.com', 
    port: 80, 
    path: '/' 
}; 
var req = http.request(options, function(res) { 
    console.log(JSON.stringify(res.headers)); 
    var fileSize = res.headers['content-length'] 
    console.log(fileSize) 
    } 
); 
req.end(); 
+0

Dzięki Noah, nie wiedziałem o tym podejściu. – Tushar

Powiązane problemy