Kapitel 8: Beispiel 1 – Node.js & Express

Kapitel  8: Beispiel 1 – Node.js & Express

Node.js ist eine JavaScript-Laufzeitumgebung, die auf der V8-Engine von Google Chrome basiert und es ermöglicht, serverseitige Anwendungen mit JavaScript zu entwickeln. Diese Plattform ist besonders bekannt für ihre hohe Leistung und Skalierbarkeit, da sie ein asynchrones, ereignisgesteuertes Modell verwendet. Express hingegen ist ein minimalistisches Web-Framework für Node.js, das die Entwicklung von Webanwendungen und APIs vereinfacht.

Die Kombination von Node.js und Express ermöglicht es Entwicklern, schnell und effizient robuste, leistungsstarke Webanwendungen zu erstellen. Node.js verarbeitet mehrere Verbindungen gleichzeitig durch sein nicht-blockierendes I/O-Modell, was bedeutet, dass Anwendungen auch unter hoher Last reaktionsfähig bleiben.

Express stellt eine Vielzahl von Funktionen bereit, die das Routing und den Umgang mit HTTP-Anfragen erleichtern. Es bietet eine klar strukturierte API und unterstützt Middleware, die es Entwicklern ermöglicht, Anfragen zu bearbeiten, bevor sie die eigentliche Logik der Anwendung erreichen. Dank dieser Flexibilität können zusätzliche Funktionalitäten, wie Authentifizierung oder Anfragenvalidierung, einfach integriert werden.

Ein weiterer Vorteil von Node.js und Express ist die große Community und die Vielzahl an verfügbaren Modulen. Über den Node Package Manager (npm) können Entwickler eine breite Palette von Paketen nutzen, die verschiedene Funktionen implementieren, ohne dass sie diese selbst erstellen müssen. Diese Ressourcen helfen, den Entwicklungsprozess zu beschleunigen und die Wartbarkeit von Code zu verbessern.

Die Entwicklung mit Node.js und Express eignet sich hervorragend für real-time Anwendungen wie Chats oder Spiele, die eine schnelle Datenübertragung erfordern. Zudem ist diese Technologie aufgrund ihrer Flexibilität und Leistung bestens für die Erstellung von RESTful APIs geeignet, die von front-end Anwendungen konsumiert werden können.

Einrichtung des Projekts

Um ein Projekt mit Node.js und Express einzurichten, sind mehrere Schritte erforderlich, die eine strukturierte Herangehensweise erfordern. Zunächst muss sichergestellt werden, dass Node.js auf dem Entwicklungssystem installiert ist. Dies kann über die offizielle Node.js-Website heruntergeladen und installiert werden. Nachdem die Installation abgeschlossen ist, kann via der Kommandozeile überprüft werden, ob Node.js korrekt installiert wurde, indem der Befehl node -v eingegeben wird, um die installierte Version abzurufen.

Im nächsten Schritt wird ein neues Verzeichnis für das Projekt erstellt. Dies kann ebenfalls über die Kommandozeile geschehen:

  • mkdir mein-projekt – Erstellt ein neues Verzeichnis mit dem Namen „mein-projekt“.
  • cd mein-projekt – Navigiert in das erstellte Verzeichnis.

Sobald sich der Entwickler im Projektverzeichnis befindet, kann das Node.js-Projekt initialisiert werden. Dies geschieht durch den Befehl npm init, der den Benutzer durch den Prozess zur Erstellung einer package.json-Datei führt. Diese Datei enthält wichtige Informationen über das Projekt, wie z.B. den Projektnamen, die Version, die Beschreibung und die Abhängigkeiten.

Nach der Initialisierung des Projekts ist der nächste Schritt die Installation von Express. Dies kann einfach über npm erledigt werden:

  • npm install express – Installiert das Express-Framework und fügt es zu den Abhängigkeiten in der package.json-Datei hinzu.

Jetzt, da Express installiert ist, kann die erste Anwendung erstellt werden. Dazu wird eine neue Datei, typischerweise app.js oder index.js, im Projektverzeichnis erstellt. In dieser Datei wird der Code erforderlich sein, um einen einfachen Express-Server zu initialisieren:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
    res.send('Hallo Welt!');
});

app.listen(PORT, () => {
    console.log(`Server läuft auf http://localhost:${PORT}`);
});

In diesem Code wird das Express-Modul importiert, und eine Instanz der Anwendung erstellt. Ein einfacher GET-Endpoint wird definiert, der bei Zugriff auf die Hauptseite den Text „Hallo Welt!“ zurückgibt. Schließlich wird der Server auf dem definierten Port gestartet, wobei standardmäßig Port 3000 verwendet wird, es sei denn, ein anderer Port wird in der Umgebungsvariable PORT festgelegt.

Um den Server zu testen, kann der Befehl node app.js in der Kommandozeile eingegeben werden. Navigiert man anschließend zu http://localhost:3000 im Webbrowser, sollte die angegebene Antwort angezeigt werden. Damit ist die grundlegende Einrichtung des Projekts abgeschlossen und die Umgebung bereit für die Entwicklung einer umfassenderen API.

Erstellen einer einfachen API

Um eine einfache API mit Node.js und Express zu erstellen, müssen mehrere wichtige Schritte beachtet werden, die den Umgang mit HTTP-Anfragen und -Antworten umfassen. Die Flexibilität von Express ermöglicht es Entwicklern, APIs schnell und effizient zu gestalten.

Ein zentraler Aspekt beim Erstellen einer API ist das Definieren von Routen, die den verschiedenen Endpunkten der API zugeordnet sind. Routen sind essentielle Komponenten, die es der Anwendung ermöglichen, auf bestimmte HTTP-Anfragen zu antworten. In Express werden Routen einfach mit der Methode app.get(), app.post(), app.put() und app.delete() definiert, um die entsprechenden HTTP-Methoden zu kapseln.

Hier ein Beispiel, wie man einige grundlegende Routen für eine einfache Todo-API implementieren kann:

app.get('/todos', (req, res) => {
    res.json([{ id: 1, title: 'Mein erstes Todo', completed: false }]);
});

app.post('/todos', (req, res) => {
    const newTodo = { id: 2, title: req.body.title, completed: false };
    res.status(201).json(newTodo);
});

app.put('/todos/:id', (req, res) => {
    const updatedTodo = { id: req.params.id, title: req.body.title, completed: req.body.completed };
    res.json(updatedTodo);
});

app.delete('/todos/:id', (req, res) => {
    res.status(204).send();
});

In diesem Beispiel werden vier Routen definiert: eine für das Abrufen der Todo-Liste, eine für das Erstellen eines neuen Todos, eine zum Aktualisieren eines bestehenden Todos und eine für das Löschen eines Todos. Bei der Erstellung einer API ist es wichtig, die richtigen HTTP-Statuscodes zu verwenden, um den Status der Anfrage deutlich zu machen.

Um die Daten in den POST– und PUT-Anfragen zu verarbeiten, muss sicherstellt werden, dass die Middleware express.json() im Express-App-Setup eingebunden wird. Diese Middleware bearbeitet eingehende JSON-Daten und macht sie als req.body verfügbar:

app.use(express.json());

Ein weiterer wichtiger Bestandteil der API-Entwicklung ist die Verwaltung von Fehlern. Es ist nützlich, ein einfaches Fehlerbehandlungssystem zu implementieren, um Anfragen, die auf ein Problem stoßen, entsprechend zu behandeln. Beispielsweise können nicht gefundene Routen oder übermäßig lange Anfragen verwaltet werden:

app.use((req, res, next) => {
    res.status(404).json({ error: 'Ressource nicht gefunden' });
});

Durch das Hinzufügen dieser Middleware wird sichergestellt, dass jede Anforderung an eine nicht definierte Route mit einem passenden Fehlercode und einer Fehlernachricht beantwortet wird.

Mit diesen Grundlagen kann die API weiter ausgebaut werden, beispielsweise durch Einfügen einer Datenbankanbindung für die Speicherung von Todos oder das Hinzufügen von Authentifizierungsmechanismen. Die Grundlagen der API-Entwicklung mit Node.js und Express bieten eine starke Basis, um komplexe Anwendungen zu erstellen, die leicht gewartet und erweitert werden können.