Kundenlogin

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 von Node.js 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 für Node.js 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.

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), der Paketverwaltung von Node.js. 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 von Node.js 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.

2 thoughts on “Was ist Node.js?

  1. Hallo Golo,

    wir sind eine Gruppe von Studenten und sollen im Rahmen eines Studienprojekts in den anstehenden Semestferien eine webbasierte E-Learning-Platform schaffen, die es Studenten auf einfache Weise ermöglicht, mit Hilfe ihrer Webcam Lernvideos zu erstellen und diese automatisiert in der Online-Plattform hochzuladen und von der Community bewerten zu lassen. Für die Implementierung suchen wir nach einer geeigneten Technologie – eignet sich dafür Node.js?

    Über eine kurze Antwort wäre ich/ wir sehr dankbar. Gruß,
    Johannes

    Reply
  2. Golo Roden - 29. Juli 2013 um 13:36

    Hallo Johannes!

    Prinzipiell klingt das erst mal passend – wobei man das so pauschal schwer beurteilen kann. Vermutlich kann man diese Frage in Bezug auf die meisten Technologien erst mal mit „Ja, vermutlich schon“ beantworten.

    Spannend wäre es, genauere Anforderungen zu kennen, da man das ganze dann besser beurteilen könnte.

    Was prinzipiell gut zu Node.js passt, sind Streaming und JSON-APIs – beides Themen, die ich mir bei einer Plattform, wie Du sie genannt hast, gut vorstellen kann. Da Ihr zudem auch JavaScript benötigen werdet, liegt Node.js natürlich relativ nah.

    Insofern würde ich erst mal sagen – ja, warum nicht?

    Liebe Grüße,

    Golo

    Reply
    • Wilhelm Seucan - 14. Februar 2017 um 17:52

      Hallo Golo, vielen Dank für das Update.

      Reply

Schreibe einen Kommentar