Se si desidera solo recuperare la dimensione del file, è meglio usare HTTP HEAD, che restituisce solo le intestazioni di risposta dal server senza il corpo.
È possibile effettuare una richiesta HEAD in Node.js come questo:
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:
mi sono reso conto che non ho davvero risponde alla tua domanda, che è essenzialmente "Come fare Chiudo anticipatamente una richiesta in Node.js? ". È possibile terminare qualsiasi richiesta nel bel mezzo della trasformazione chiamando 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);
});
});
è possibile verificare questa commentando la chiamata destroy() e osservando che in una richiesta completa di due pezzi vengono restituiti. Come accennato altrove, tuttavia, è più efficiente utilizzare semplicemente HEAD HTTP.
fonte
2013-04-24 14:33:40
Grazie, per la risposta. Com'è diverso da response.end() e quando dovrei usarlo? – Tushar
Un'altra cosa, se non associo un ascoltatore all'evento 'dati', i dati saranno ancora trasferiti? Intendo che la mia larghezza di banda verrà inutilmente sprecata? – Tushar
Sì, i dati verranno comunque inviati al client anche se non si gestisce l'evento "dati". –