Node.js | Eine Einführung für Anfänger, Teil 1

Tjark Rasche
Vom 9. Dezember 2013

In letzter Zeit ist unter Webentwicklern immer wieder von Serverseitigen JavaScript und dessen großer Vielfalt an Einsatzmöglichkeiten die Rede. Du wirst dir jetzt wahrscheinlich denken: Was?!? Serverseitiges Javascript? Ja, das ist dank Node.js möglich, und bietet sogar viele Praktische Anwendungsmöglichkeiten. Beispielsweise lässt es sich Prima für Webapps nutzen bei denen es nötig ist, dass beide Seiten, also Client und Server, sich gegenseitig Informationen zuschicken. Doch was genau ist eigentlich Node.js und wie lässt es sich effektiv einsetzen? Das alles kläre ich im Laufe dieser Artikelserie. In diesem ersten Teil erlernst du die Basics und erstellst einen (sehr) einfachen Node.js Webserver der immerhin die Welt mit "Hello World!" begrüßen kann.

Dieser Artikel wurde zuletzt vor über einem Jahr aktualisiert. Die Inhalte könnten inzwischen nicht mehr aktuell sein.

Was ist Node.js?

Gute Frage, einfache Antwort. Genau genommen ist es, frei nach Wikipedia, "eine serverseitige Plattform zum Betrieb von Netzwerkanwendungen."

Soll heißen Node.js ist eine Plattform mit der man Serverseitig mit JavaScript entwickeln kann und sich somit lästige Aufgaben vom Hals schaffen oder gar ganze Web Apps bauen kann. Zudem ist Node.js extrem ressourcenschonend, was daran liegt, dass Node.js Applikationen wie alle anderen JavaScript Anwendungen auch, nicht Thread-, sondern Event-Basiert sind. Der größte Vorteil hierin liegt im Serverbetrieb bei den Verbindungen.

Während bspw. Apche viele für jede Verbindung einen eigenen Thread öffnet und somit viel Arbeitsspeicher verschlingt, gibt sich eine Node.js Anwendung mit vergleichbar wenig Ressourcen zufrieden, was natürlich immer gut ist. Außerdem bietet Node.js auch einen eigenen Webserver.

Das ist ziemlich cool, da man dadurch theoretisch komplett auf Apache oder nginx verzichten kann, und nur noch Node.js braucht. Hierbei kann Node.js das komplette Routing der URL's übernehmen, was gerade für Single-Page-Apps extrem praktisch ist. Node.js basiert auf Googles V8 Engine welche auch bei Google Chrome zum Einsatz kommt. Das hat zur Folge, dass man sich von der Komptabilität her an Google Chrome ausrichten kann. Was Chrome kann, kann Node.js auch. Das gilt für so gut wie alle Funktionen und API's.

Wie bekomme ich Node.js auf meinen Server?

Das ist einer der schwierigsten Fragen für Anfänger. Denn auf 90% der Hosting Pakete der 08/15-Anbieter ist Node.js einfach nicht dabei.

Wenn du einen Root- oder Virtual-Server dein eigen nennst kannst du es dir ohne Probleme installieren, hier gibt es dazu eine gute Anleitung.

Falls du keinen Server gemietet hast sondern nur einen Shared Hosting Account ohne Node.js Unterstützung kannst du es dir zum Rumexperimentieren auch einfach lokal Installieren. Dafür kannst du dir einfach die entsprechende Datei von der Node.js Website herunterladen und ausführen, schon hast du auch eine Konsole über die du Node.js ausführen kannst.

Ich persönlich kann dir nur den kleinen aber feinen Shared Hoster Uberspace empfehlen der dir alles bietet was du für den Einstieg in Node.js brauchst. Für 30 Tage bekommst du deinen Account dort auch kostenlos, was für das Ausprobieren reichen sollte.

Wenn du wirklich jeden Codeschnipsel dieser Artikelserie 1:1 so verwenden möchtest wie er hier erwähnt ist, empfehle ich dir einfach einen Testaccount bei Uberspace anzulegen. Kostet ja für den ersten Monat nichts und du musst keine persönlichen Daten angeben.

Die Hello-World's der Node.js Welt

Es gehört eigentlich zum guten Ton in Anleitungen für Anfänger als Allererstes ein 'Programm' in der zu erlernenden Sprache zu schreiben dass einem die simple Nachricht 'Hello World!' Ausgibt. Zwar musst du für Node.js keine neue Programmiersprache lernen, aber ein bisschen anders als in normalem JavaScript ist das typische 'Hello World!' schon. Eigentlich gibt es gleich zwei verschieden Hello World's, einmal das Hello World in der Shell, und einmal das im Browser.

  • nodeapp

    • client

    • server

      • server.js

'Hello World!' in der Shell ausgeben

Für die Konsole ist es sehr einfach.

console.log("Hello World!");

Den oben gezeigten Quellcode kannst du in die server.js-Datei abtippen (kopieren geht auch, beim abtippen lernt man's aber gleich), um ihn zu testen. Wenn du jetzt über einen Shell-Emulator wie beispielsweise PuTTY auf deinen Uberspace (oder Server oder Userspace oder was auch immer) zugreifst und mithilfe von cd html/nodeapp/server in das richtige Verzeichnis wechselst, kannst du mithilfe des einfachen Befehls node server.js Node.js den Code der Datei ausführen lassen, und siehe da, ein 'Hello World!' leuchtet in der Konsole auf!

Gestandene JavaScript Entwickler wissen bereits, dass man mit console.log() normalerweise die Möglichkeit hat Daten für die Debugging Konsole an den Browser zu senden. Im Falle von Node.js macht die Funktion genau das gleiche, nur dass die Daten halt in der Bash Shell(PuTTY) angezeigt werden, und nicht im Browser, der ja momentan nicht wirklich existiert. Wie beim normalen JavaScript entiwckeln im Browser ist es auch beim Entwickeln mit Node.js sehr hilfreich immer mithilfe von console.log() zu sagen was der Code überhaupt gerade macht und evtl. noch ein paar Daten zum Debuggen dazugeben.

'Hello World!' im Browser ausgeben

Das 'Hello World!' im Browser ist schon wesentlich komplizierter. Ziel der Mini-Anwendung ist es auf einem eigenen Port nach einer Anfrage vom Browser zu lauschen und diese mit 'Hello World!' zu beantworten. Dafür muss man mithilfe von Node.js einen eigenen Webserver aufsetzen. Das geht ohne große Probleme von Hand, allerdings muss man dafür so viel Code schreiben...

Ok so viel ist es auch wieder nicht, aber ich, und wahrscheinlich jeder andere auch, schreibe aus gründen der Übersichtlichkeit und der Faulheit immer möglichst wenig Code und greife lieber auf schon bestehende Ressourcen zurück. Und je weniger Code man schreibt, desto weniger Fehler können sich einschleichen.

Hier kommen die Node-Module in's Spiel. Node.js lässt sich sehr Einfach durch sog. Module erweitern, die dessen Funktionsumfang erheblich erweitern können. Beispielsweise lässt sich durch ein Modul eine komplette Integration von diversen API's oder ein eigener HTML-Parser umsetzen. Sehr praktisch also.

Module müssen bei Node.js nicht nervig von Hand durch kopieren irgendwelcher Dateien in die entsprechenden Verzeichnisse installiert werden, sondern können mithilfe von Node.js' mitgelieferten Packet Manager einfach über eine Zeile Code in der Shell installiert werden. In unserem Falle kann ich dir das Modul connect empfehlen. Es erleichtert das erstellen eines Webservers erheblich und soll schneller sein als die Standard-Variante von Node.js.

npm install connect

Module installiert man wie im Beispiel immer mithilfe des Befehls npm install modulname, wobei npm für Node Packet Manager steht. Wenn du jetzt in deinem FTP Client das Verzeichnis für unsere App /nodeapp/server/ anschaust siehst du hier einen neuen Ordner. In diesem, als node_modules benanntem Verzeichnis findest du alle Module die du im laufe dieser Serie erstellst.

Doch Vorsicht! Diese Module sind nur innerhalb dieses Verzeichnisses und seiner Unterverzeichnisse Verfügbar. Um ein Modul in seiner Node.js Anwendung zu verwenden, muss man es erst mit var modulname = require('modulname'); in einer Variable bereitstellen. Jetzt fehlt nur noch ein freier Port den du verwenden darfst um deinen Weserver zu betreiben.

Bei den Ubernauten reicht hierfür ein kurzer Tweet oder eine Email um diesen freizuschalten. Wie es bei deinem Hoster ist musst du selbst herausfinden. Hast du einen Port freigeschaltet, kannst du mit folgendem Code deinen ersten Webserver aufsetzen.

var connect = require('connect'); 
var server = connect().
use(function(req, res) { 
    res.end('Hello World!'); 
}). 
listen(64084); 
console.log("Server has started and is listening to http://theme.t-jark.de:64084");

In den Klammern hinter listen muss die Port-Nummer eingetragen und die Konsolenausgabe muss noch angepasst werden, ansonsten ist der Quellcode voll funktionsfähig. Wenn man jetzt in der Konsole mit node server.js Node.js startet und im Browser die Domain zu seinem Webspace mit der mit einem Doppelpunkt angehängten Port-Nummer eingibt, bekommt man den freundlichen Ausruf 'Hello World!' zu sehen.

In meinem Fall ist das http://t-jark.de:65405/. Zugegeben, dass ist noch keine supergeile Webapp, aber immerhin begrüßt uns der Browser schon mal! Das ist doch auch schon was. :D

Das erwartet dich in den nächsten Teilen der Serie:

  • Ein vernünftiger Webserver mit Node.js und connect (mehr als nur Hello World! :) )

  • Node.js sinnvoll verwenden (bis jetzt kann es ja nichts was PHP nicht könnte)

  • Eine Einführung in das Modul socket.io, welches das einfache erstellen von und arbeiten mit Websockets ermöglicht.

  • Eine einfache Anwendung die das zuvor gelernte zusammenfasst

  • # node.js
  • # Webentwicklung
  • # Uberspace

Du suchst die Kommentare?

Keine Sorge, die sind nicht verloren! Es dauert aber noch eine Weile, bis sie wieder zu sehen sind und du neue Kommentare hinterlassen kannst.

Netzleben ist frisch von einer alten Kirby-Website auf eine neue, Statamic-basierte Website umgezogen. Leider ist das Plugin für Kommentare mit Statamic 3 noch nicht kompatibel.