Javascript Node.js

Node.js

Node.js ist ein Tool zur Programmierung von Netzwerk-Anwendungen und wird auch als Javascript Runtime Environment (Laufzeit-Umgebung) bezeichnet. In Node.js hat Javascript Zugriff auf Dateisystem und Datenbanken und agiert ähnlich wie PHP auf einem Apache-Webserver.

Während bei den klassischen Programmiersprachen wie C und PHP die Ausführung von Datei- und Datenbankzugriffen die Anwendung blockiert, kann Javascript Anweisungen im Hintergrund asynchron durchführen.

18-12-15 SITEMAP CSS HTML JS Basis JS Web Tutorial SVG

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 auf 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.

install-nodejs
LTS steht für Long Term Support.

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.

visual-studio-code
Visual Studio Code (für Windows, MacOS, Linux) ist ein Programm-Editor, der Node.js direkt unterstützt und die console-Ausgabe im integrierten Terminal anzeigt.

MacOS: Im Terminal zum Desktop-Verzeichnis, Command Prompt unter Windows

Richtig: Zugriff auf das Dateisystem mit Javascript. Die Console gehört um globalen Objekt (eine Art Äquivalent zum Windows-Objekt) und der Aufruf der Console hätte auch als global.console.log() schreiben können.

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.

windowglobal
documentprocess
historymodule
location__filename
navigatorrequire

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 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.