Node.js Einfacher HTTP request


Einen http Request in Node zu machen ist ganz einfach:

var http = require('http');

http.get(url, function(res) {
  console.log("Got response: " + res.statusCode);
  var bodyarr = [];

  res.on('data', function(chunk){
    bodyarr.push(chunk);
  });
  res.on('end', function(){
    console.log(bodyarr.join('').toString());
  });
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

Damit das ganze klappt muss das Module http. Soweit so gut. Dann wird der Request abgeschickt, und es kommt eine Response (res) zurück, Inhalt gibts hier jedoch noch keinen:

console.log("Got response: " + res.statusCode);
var bodyarr = []

In diesem Response Objekt befinden sich die Headers und alle möglichen Sachen, aber noch kein Body. Dieser muss mit einem Listener abgeholt werden. Zudem bereiten wir auch schon mal einen Container für die Einzelteile der Antwort vor.

res.on('data', function(chunk){
    bodyarr.push(chunk);
  });

Dabei nicht erschrecken, denn chunk ist ein Bufferstream, da das ganze asynchron daher kommt, werden die ganzen Einzelteile vorerst mal in einem Array gespeichert.

res.on('end', function(){
    console.log(bodyarr.join('').toString());
  });

Wenn alles fertig ist, können wir den Array zusammenfügen und dann noch zu einem String umwandeln. Und schon ist fertig. In meiner produktiven Methode sieht das dann wie folgt aus:

fetchResult = function(url, callback) {
    var http = require('http');

    var bodyarr = [];
    http.get(url, function(res) {
      res.on('data', function(chunk){
          bodyarr.push(chunk);
      });
      res.on('end', function(){
          callback(bodyarr.join('').toString());
      });
    }).on('error', function(e) {
      callback(e.message);
    });
}

Nicht vergessen, die callback Funktion, welche ausgeführt wird, wenn eben alles fertig ist.