Runtime
Node.js ist keine Programmiersprache, keine Javascript-Library oder Framework, sondern eine Runtime, eine Laufzeitumgebung. »Umgebung« ist ein passender Begriff: In der Laufzeitumgebung läuft nicht einfach Javascript für Berechnungen und Eingriffe in das Layout, sondern Javascript hat Zugriff auf das Dateisystem und Datenbanken.
Wir haben Zugriff auf Dateien und können auf Datenbanken zugreifen – ähnlich wie PHP auf einem Apache-Server. Aber Javascript kann zusätzlich asynchrone Funktionen durchführen und wird nicht durch den Zugriff auf große Dateien oder Datenbanken blockiert, sondern kann aufwändige Funktionen anstoßen, die im Hintergrund ausgeführt werden. Sobald so eine Funktion ausgeführt wurde, kann Javascript per Callback auf die Ergebnisse reagieren.
Und anders als PHP und Python braucht Node.js keinen Webserver.
Node.js-Anwendungen
Auf dem lokalen Rechner hat Node Lese- und Schreibzugriff auf Dateien und Ordner. Aber meistens wird Node als Server für den Zugriff auf Datenbanken eingesetzt, um Informationen für den Benutzer bereitzustellen und Fotos, Video und andere Inhalte zu zeigen.
Genauso wie ein klassischer Apache-Server bietet Node Funktionen wie Autorisation und Sessions.
Node.js Installation
Mit Node.js können Frontend und Backend in derselben Programmiersprache entwickelt werden: Ein Node.js-Server hat Zugriff auf das Dateisystem und Datenbanken und kann Emails versenden, so dass das komplette Projekt mit Javascript umgesetzt werden kann. Für die Client-Seite mit HTML, CSS und Javascript macht es keinen Unterschied, ob sie auf einem Node.js oder Apache-Server basiert.
Node.js kann fertig kompiliert direkt von Node.js als Paket geladen und mit einem Klick installiert werden.

Mit der Installation von Node.js wird zugleich auch npm installiert, ein Package Manager für Node.js. Für Node.js gibt es eine große Anzahl von Erweiterungen – Pakete –, die entweder bereits lokal mit der Installation von Node.js als globale Objekte ausgeliefert werden oder mit Hilfe von npm installiert werden.
Übersicht über die globalen Objekte: https://nodejs.org/api/globals.html
NODE – Javascript im Terminal
Mit Node.js wird kein Webserver gebraucht, um Javascript auszuführen. Eine Datei anlegen – z.B. in einem Ordner nodejs auf dem Desktop – und mit hallo-node.js speichern. Die Konsole für die Ausgaben ist das Terminal des Systems.

MacOS: Im Terminal zum Desktop-Verzeichnis, Command Prompt unter Windows
Richtig: Zugriff auf das Dateisystem mit Javascript. Die Console gehört zum globalen Objekt (eine Art Äquivalent zum Windows-Objekt) und der Aufruf der Console könnte auch als global.console.log() geschrieben werden.
Für Informationen auf Systemebene wird ein Node-Modul gebraucht. Module werden mit require eingebunden. Das os-Modul stellt Methoden und Eigenschaften der System-Ebene zur Verfügung.
Javascript vs Node.js
Es gibt wichtige Unterschiede zwischen Javascript im Browser und Node. So gibt es kein Window und kein Document, anstelle von Window tritt global, anstelle von document haben wir process.
window | global |
document | process |
history | module |
location | __filename |
navigator | require |
Node.js Core Module: z.B. http – Webserver
Module wie os und path wurden mit der Installation von Node.js geliefert und bilden die Core-Module oder globalen Objekte. Eines der zahlreichen Core-Module ist http, ein rudimentärer Webserver.
const http = require('http'); const port = process.env.PORT || 3000; http.createServer(function(request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); response.end("Hello, World!\n"); }).listen(port); console.log(`App is running... (port: ${port})`);
Quelle node-hello-world auf GitHub.
Diese wenigen Zeilen geben ein vollständiges HTML-Dokument im Browser aus.
<html> <head> </head> <body> <pre style="word-wrap: break-word; white-space: pre-wrap;">Hello, World!</pre> </body> </html>
Express
Webseiten für einen Nodejs-Server werden angelegt wie auf einem Apache-Server: Statische Inhalte werden in HTML-Dateien aufbereitet, dynamische Inhalte werden vom Server erstellt. Express ist ein Framework für webbasierte Anwendungen und wird für einzelne Seiten und hybride Anwendungen eingesetzt.
Express ist ein Node.js-Modul, aber wird nicht mit Node geliefert, sondern muss installiert werden (z.B. mit npm). Das Modul muss also auch mitgeliefert werden, wenn die Anwendung weiter gegeben oder an anderer Stelle installiert wird.
Express wird mit npm installiert und im Verzeichnis gespeichert (s).
npm install -s express
Alle installierten Module werden werden in package.json gesammelt. Diese Json-Datei erzeugt man am einfachsten mit dem Aufruf npm init in der Console im Verzeichnis der Anwendung.
{ "name": "express", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node server.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.2" } }
Eine statische HTML-Datei index.html anlegen. Der Express-Minimalserver braucht nicht einmal eine Handvoll Zeilen.
const express = require ("express"); const app = express(); app.use(express.static(__dirname)); app.listen (3000);
Node.js Anwendungen auf dem Server
Was bringt Node.js als Webserver? Da haben wir PHP und Datenbanken im Backend und Javascript im Frontend. Javascript sowohl im Frontend als auch im Backend hat unbestritten Vorteile: Frontend und Backend können Code, Algorithmen und Datenstrukturen teilen, wir müssen nicht zwischen zwei Programmiersprachen hin und her schalten und der Pflegeaufwand wird reduziert.
Ein Beispiel ist JSON, das ideal als Datenstruktur sowohl im Backend als auch im Backend ist. Mit Node.js und Javascript wird keine Konvertierung gebraucht. Javascript ist sicher nicht die ultimative Lösung, aber effizient für viele Anwendungen.