Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Erstellen Benutzerdefinierter Middleware | Entwicklung von Webanwendungen mit Express.js
Backend-Entwicklung mit Node.js und Express.js

Erstellen Benutzerdefinierter Middleware

Swipe um das Menü anzuzeigen

In Express.js können benutzerdefinierte Middleware-Funktionen mit der Methode app.use() erstellt werden. Diese Funktionen erhalten drei Parameter: req (das Request-Objekt), res (das Response-Objekt) und next (eine Funktion, um die Kontrolle an die nächste Middleware in der Kette zu übergeben). Benutzerdefinierte Middleware kann global für alle Routen oder für bestimmte Routen durch Angabe eines Routenpfads angewendet werden.

Erstellen von benutzerdefinierter Middleware

Hier ist ein einfaches Beispiel für eine benutzerdefinierte Middleware-Funktion, die den Zeitstempel und die URL jeder eingehenden Anfrage protokolliert:

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

In diesem Beispiel protokolliert die benutzerdefinierte Middleware den Zeitstempel und die URL jeder eingehenden Anfrage in der Konsole. Die Funktion next() wird aufgerufen, um die Kontrolle an die nächste Middleware in der Pipeline zu übergeben.

Praxisbeispiel: Kombination von eingebauter und benutzerdefinierter Middleware

Hier ist ein praxisnahes Beispiel, bei dem eine eingebaute Middleware von Express zum Parsen von JSON-Daten verwendet wird und anschließend eine benutzerdefinierte Middleware zur Validierung dieser Daten erstellt wird:

const express = require('express');
const app = express();

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

In diesem Beispiel:

  • Es wird die eingebaute Middleware express.json() verwendet, um eingehende JSON-Daten zu parsen;
  • Es wird eine benutzerdefinierte Middleware erstellt, die prüft, ob die geparsten JSON-Daten fehlen oder leer sind. Ist dies der Fall, wird eine 400 Bad Request-Antwort mit einer Fehlermeldung gesendet. Sind die Daten gültig, wird next() aufgerufen, um fortzufahren;
  • Die Route /api/data erwartet gültige JSON-Daten. Wenn die benutzerdefinierte Middleware die Daten validiert, erhält der Routen-Handler diese und sendet eine Erfolgsantwort.
Codebeschreibung
expand arrow
  • Zeile 1: importiert das Express.js-Framework;

  • Zeile 2: erstellt eine Express-Anwendungsinstanz durch Aufruf von express(). Das resultierende app-Objekt wird verwendet, um Routen, Middleware und die Verarbeitung von HTTP-Anfragen zu definieren;

  • Zeile 5: aktiviert die integrierte Middleware express.json(). Diese Middleware analysiert automatisch eingehende JSON-Anfragekörper und stellt die Daten über req.body zur Verfügung;

  • Zeilen 8-18: definieren benutzerdefinierte Middleware zur Validierung eingehender JSON-Daten;

  • Überprüfung, ob req.body Daten enthält;

    • Rückgabe einer 400 Bad Request-Antwort, wenn der Anfragekörper fehlt oder leer ist;
    • Aufruf von next(), wenn die JSON-Daten gültig sind, um mit der nächsten Middleware oder dem nächsten Routen-Handler fortzufahren;
  • Zeilen 21-24: definieren eine POST-Route unter /api/data;

    • Abruf der übermittelten JSON-Daten aus req.body;
    • Rückgabe einer 200 OK-Antwort mit einer Bestätigungsnachricht und den empfangenen Daten;
  • Zeilen 26-28: starten die Express-Anwendung und beginnen, Anfragen auf Port 3000 zu empfangen.

Dieses Beispiel zeigt, wie sowohl integrierte als auch benutzerdefinierte Middleware verwendet werden kann, um Daten zu validieren, bevor sie die Routen-Handler erreichen. So wird sichergestellt, dass die Daten vor der weiteren Verarbeitung das erwartete Format haben.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 9

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 3. Kapitel 9
some-alt