Node.js ist ein in JavaScript zu programmierender Web-Server, der es erlaubt, die Entwicklung von Frontend und Backend einer Web-Applikation in der gleichen Sprache auszuführen.
Mit Node.js lässt sich mittlerweile allerhand anstellen. Die Installation ist spielend leicht und ein erster Server ist auch schnell konfiguriert:
var http = require('http'); var server = http.createServer(function(req, res) { res.end('Hello World!'); }); server.listen(8910);
In diesem einfachen Beispiel passieren fünf relevante Dinge:
- Das Modul http eingebunden, welches in der Node-Installation direkt vorhanden ist (Standard-Modulübersicht: http://nodejs.org/api/).
- Ein Http-Server wird erzeugt.
- Dem Server wird ein Request-Handler mit übergeben, welcher bei jeder Anfrage aufgerufen wird und diese verarbeitet.
- Die Response wird mit res.end() gleichzeitig mit dem Text „Hello World!“ befüllt und für die Auslieferung freigegeben.
- Dem Server wird angewiesen, auf dem Port 8910 zu lauschen.
Der Server wird mittels node server.js gestartet. Ein curl -i localhost:8910 liefert uns die folgende HTTP-Antwort:
HTTP/1.1 200 OK Date: Fri, 30 Aug 2013 12:32:15 GMT Connection: keep-alive Transfer-Encoding: chunked Hello World!
Fertig ist unser Hello World HTTP-Server.
Module für Node-Apps
Was den Server besonders attraktiv macht ist das mitgelieferte Modul npm. Hiermit lassen sich im Nu Abhängigkeiten zu anderen Modulen einbinden. Diese erweitern die Fähigkeiten des Webservers beträchtlich und daher möchte ich an dieser Stelle eine kurze Übersicht vom zwei der meines Erachtens wichtigsten Erweiterungen geben.
Connect
Connect ist ein Framework zum Einbinden von Middleware (hier auch als Plugins bezeichnet) und ist der Quasi-Industriestandard für diesen Zweck. Es bringt bereits viele Plugins mit, welche mittels der Funktion use(<plugin>())
in die Applikation eingebunden werden können. Unter ihnen ist beispielsweise ein Body-Parser, welcher dafür sorgt, dass JSON- und URL-Encodierte Daten als body
-Property an das Request-Objekt angehängt werden.
var connect = require('connect'); var app = connect(); app.use(connect.bodyParser()); app.use(function(req, res) { res.writeHead(200, {'Content-Type': 'application/json'}); res.end(JSON.stringify(req.body, false, 4)); }); app.listen(8910);
Wenn wir nun den Server starten und curl -id ‚{„node.js“:{„coolness“:“100%“}}‘ -H „Content-Type: application/json“ localhost:8910 ausführen, bekommen wir als Antwort:
HTTP/1.1 200 OK Content-Type: application/json Date: Fri, 30 Aug 2013 14:47:19 GMT Connection: keep-alive Transfer-Encoding: chunked { "node.js": { "coolness": "100%" } }
Express
Express ist eine Sammlung von Middleware-Plugins für Connect und erbt gleichzeitig davon. Man kann also Express verwenden, ohne Connect explizit einzubinden und erhält ein erweitertes Set an Features.
Das Modul erweitert unter anderem auch das Response-Objekt um die Methode send() und sendfile() , welche das Versenden von Inhalten vor allem durch seine automatische Header-Anpassung erleichtern.