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

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.

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

Facebook Twitter Google+ WhatsApp

von Tjark Rasche

In Ulm wohnender Abiturient, der Semi-Professionell als Web- und Backendentwickler arbeitet. Spezialisiert habe ich mich dabei auf Node.js und Angular.js, fühle ich aber auch bei PHP und vor allem Wordpress heimisch.

Hinterlasse einen Kommentar

Kommentare

Felix

Hallo Tjark,
sehr schöne Einführung. Gibt’s keine Fortsetzung oder finde ich die einfach nicht.

Hierauf antworten

Tjark Rasche

Hallo Felix,
Tatsächlich gibt es momentan noch keinen zweiten Teil.
Dieser Blog war relativ lange inaktiv und in der Zeit habe ich meine Artikelserie etwas aus den Augen verloren. Momentan arbeite ich aber am zweiten Teil, der wohl spätestens im Laufe der nächsten Woche erscheinen wird.
Danke für dein Interesse und entschuldigung für die lange Pause zwischen den Artikeln ;)
Tjark

Hierauf antworten

Karsten

Hey Tjark,

eine "netzleben"-Woche ist aber lange :D

Gute Einführung :) Hat sicher auch lange gedauert, ein zweiter Teil wäre cool - wenn du Zeit hast ;)

Hierauf antworten

Andi

Hallo Tjark,
echt coole einführung… bin ziemlich neu in der materie dewegen ein recht “dumme frage”
…habe connect module in einem ordner nun (benutze nur node.js lokal zum probieren)
… wo gebe ich jetzt den hello world code ein… in die server.js…? aber die habe ich noch gar nicht…
mmmh, hoffe du kannst mich kurz supporten..danke!

Hierauf antworten

Tjark Rasche

Hallo Andi!
Die server.js musst du selbst mit einem Texteditor deiner Wahl erstellen.
Für den Anfang reicht im Prinzip der Texteditor von Windows(die editor.exe, nicht Word oä.), mit der Zeit sollte man sich aber auf jeden Fall einen vernünftigen Code Editor anschaffen. Fürt fortgeschrittene kann ich an kostenlosen Editoren Aptana Studio empfehlen.

Mit dem Editor musst du dann einfach nur die server.js erstellen und mit den Inhalten aus dem Artikel füllen.

Diese musst du dann im richtigen Verzeichnis unterbringen(das, in dem auch die node module sind). Dann musst du unter Linux in der Bash shell den Befehl node ~/Pfad/zur/datei/server.js ausführen. Unter Windows kannst du genau den gleichen Befehl in der Powershell ausführen, die du die Tastenkombination Windows-Taste + R verwendest, in das aufgehende Fenster ‘Powershell’ eintippst und dann auf ‘Ok’ klickst.

Dann kannst du im Browser die entsprechende Seite aufrufen. Meist ist dies http://localhost:8080, bzw. der Port den du im Code angegeben hast.

Ich hoffe ich konnte dir helfen,
Tjark

Hierauf antworten

KustigerKai

z.B. mit der Windows Konsole (suche nach CMS auf deinem Rechner) oder mithilffe von Externen wie Git Bash

Hierauf antworten