Was ist Node.js?
Node.js ist eine der Technologien, denen in den vergangenen Jahren ausgesprochen viel Aufmerksamkeit zuteil wurde. Doch was ist Node.js überhaupt?
Kurz gesagt ist Node.js ein Framework, das auf dem derzeit schnellsten JavaScript-Compiler, Google V8, basiert. Der Schwerpunkt liegt dabei auf höchst effizientem, da asynchronem I/O, also der Anbindung von externen Ressourcen, wie beispielsweise dem Netzwerk oder dem Dateisystem. Da Node.js auf JavaScript basiert, ist die Einstiegshürde zumindest für Webentwickler entsprechend niedrig.
Einen http-Server schreiben
Ein häufig anzutreffendes Szenario ist die Entwicklung von serverseitigen Webanwendungen. Hierfür enthält Node.js das http-Modul, das Funktionen zum Entwickeln von Webservern bereitstellt. Um dieses Modul zu verwenden, genügt dessen Import mit Hilfe der require-Funktion:
var http = require(‚http‘);
Anschließend kann man dessen Funktionen aufrufen, allen voran createServer, die einen neuen Webserver erzeugt. Als Parameter erwartet diese Funktion eine weitere Funktion, die den eingehenden Request und die ausgehenden Response als Objekte entgegennimmt. Um den Webserver tatsächlich auszuführen, muss man an diesem anschließend noch die listen-Funktion mit dem gewünschten Port aufrufen:
var http = require(‚http‘);
var server = http.createServer(function (req, res) {
res.write(‚Hallo Node.js!‘);
res.end();
});
server.listen(3000);
Um diese erste Anwendung zu starten, genügt der Aufruf der folgenden Anweisung auf der Kommandozeile:
$ node app.js
Da Node.js plattformunabhängig ist, funktioniert dies allerdings nicht nur unter unixoiden Betriebssystemen wie beispielsweise OS X und Linux, sondern auch unter Windows. Dem Entwickler steht die Wahl einer geeigneten Plattform für die Entwicklung also frei.
Um dem Webbrowser mitzuteilen, dass es sich bei dem zurückgelieferten Inhalt nicht um reinen Text, sondern eine HTML-Datei handelt, muss man zusätzlich den Content-Type-Header übertragen. Dazu dient die Funktion writeHead, die wie die Funktionen write und end ebenfalls am res-Objekt zur Verfügung steht:
var http = require(‚http‘);
var server = http.createServer(function (req, res) {
res.writeHead(200, {
‚Content-Type‘: ‚text/html‘
});
res.write(‚Hallo Node.js!‘);
res.end();
});
server.listen(3000);
Weitere Module verwenden
Außer dem http-Modul enthält Node.js einige weitere Module, beispielsweise für die Implementierung von TCP/IP-basierten Servern, den Zugriff auf das Dateisystem oder die Verarbeitung von Streams. Eine Liste aller enthaltenen Module sowie deren Beschreibung findet sich in der Dokumentation von Node.js./p>
Um dem Webbrowser mitzuteilen, dass es sich bei dem zurückgelieferten Inhalt nicht um reinen Text, sondern eine HTML-Datei handelt, muss man zusätzlich den Content-Type-Header übertragen. Dazu dient die Funktion writeHead, die wie die Funktionen write und end ebenfalls am res-Objekt zur Verfügung steht:
Node.js wird von einer außergewöhnlich aktiven Community begleitet, die in den vergangenen Jahren bereits zahlreiche zusätzliche Module entwickelt hat. Inzwischen stehen für nahezu jeden Anwendungsfall gleich mehrere Module zur Verfügung. Die Bandbreite reicht dabei von der Anbindung von Datenbanken über die Kommunikation auf Basis diverser Protokolle bis hin zu Video- und Audioprogrammierung.
Verwaltet wird dieser ganze Fundus mit Hilfe von npm (Node.js Package Manager). Problematisch ist allerdings, zunächst einen Überblick über die derzeit rund 40.000 Module zu gewinnen.
Anders als im Webbrowser führt Node.js den JavaScript-Code nicht innerhalb einer Sandbox aus, so dass man weitreichenden Zugriff auf das zu Grunde liegende System erhält. Dies erlaubt, Node.js nicht nur zur Entwicklung von Webanwendungen zu verwenden, sondern beispielsweise auch als Ersatz für Bash- beziehungsweise PowerShell-Skripte.
Stärken und Schwächen
Die größte Stärke besteht in der einfachen Programmierung von ausgezeichnet skalierbaren Anwendungen in einer Sprache, die jedem Webentwickler vertraut ist. Sein wahres Potenzial kann Node.js allerdings nur dann entfalten, wenn tatsächlich viele I/O-Zugriffe durchgeführt werden. Besonders eignet sich Node.js auch für die Implementierung von Push-Diensten, beispielsweise auf Basis von Websockets.
Ein weiterer interessanter Aspekt von Node.js ergibt sich aus der Verwendung von JavaScript: Zahlreiche REST-basierte Webdienste verwenden heutzutage JSON – ein Datenformat, das JavaScript nativ beherrscht. Daher eignet sich Node.js auch besonders gut, um derartige Dienste zu entwickeln, insbesondere in Verbindung mit einer NoSQL-Datenbank, die ebenfalls JSON spricht.
Dennoch ist Node.js nicht für alle Szenarien gleichermaßen geeignet: Basiert eine Anwendung nämlich kaum auf I/O-Zugriffen, sondern vielmehr auf umfangreichen, CPU-intensiven Berechnungen, ist Node.js weitestgehend ungeeignet. Hier gilt es also, von Fall zu Fall abzuwägen.
Fazit
Node.js ist eine ausgesprochen interessante Technologie, die es erlaubt, komplexe und sehr gut skalierbare Webanwendungen mit wenigen Zeilen Code zu entwickeln. Die Verwendung von JavaScript ermöglicht Webentwicklern dabei einen leichten und problemlosen Einstieg.
Die Herausforderung bei Node.js besteht nicht darin, den (verhältnismäßig kleinen) Kern zu beherrschen, sondern das umfangreiche Ökosystem kennenzulernen. Dies gelingt nur mit Zeit und Geduld – oder entsprechender Anleitung durch einen bereits Node.js-erfahrenen Entwickler.
Wer sich mit der Entwicklung von I/O-lastigen Webanwendungen, webbasierten Push-Diensten oder REST-Webdiensten beschäftigt, ist gut beraten, einen Blick auf Node.js zu werfen.
