Joi für JavaScript (Node.js): Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in Joi: Was es ist und warum man es braucht

Joi ist eine leistungsstarke Bibliothek zur Datenvalidierung in der JavaScript-Umgebung (Node.js). Sie ermöglicht es, Datenschemata mit einer einfachen und ausdrucksstarken API zu beschreiben und anschließend zu prüfen, ob reale Objekte diesen Schemata entsprechen. Besonders beliebt ist Joi bei der Entwicklung serverseitiger Webanwendungen, wo eingehende Anfragen, Konfigurationen, Formulardaten und andere Datenstrukturen überprüft werden müssen.

Die Hauptgründe für den Einsatz von Joi:

  • Sicherheit: Verhindert, dass ungültige oder schädliche Daten in Ihre Anwendung gelangen
  • Lesbarkeit des Codes: Joi-Schemata sind leicht lesbar und verständlich
  • Flexibilität: Unterstützt komplexe verschachtelte Strukturen, bedingte Validierung und benutzerdefinierte Regeln
  • Integration: Funktioniert hervorragend mit Express, Koa, Fastify und anderen Frameworks
  • Detaillierte Fehler: Liefert verständliche Fehlermeldungen mit genauer Angabe der Problemstelle

Installation von Joi

Die Installation von Joi in ein Node.js-Projekt erfolgt über npm oder yarn:

# Mit npm
npm install joi

# Mit yarn
yarn add joi

# Wenn Sie TypeScript verwenden, installieren Sie die Typen (optional)
npm install @types/joi --save-dev

Nach der Installation können Sie Joi in Ihr Projekt importieren:

const Joi = require('joi');
// oder für ES-Module:
// import Joi from 'joi';

Schnellstart: Erstes Validierungsbeispiel

Erstellen wir ein einfaches Schema zur Validierung von Benutzerdaten und testen es:

const Joi = require('joi');

// Validierungsschema definieren
const schema = Joi.object({
    username: Joi.string()
        .alphanum()
        .min(3)
        .max(30)
        .required(),
    password: Joi.string()
        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),
    email: Joi.string()
        .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
});

// Zu prüfende Daten
const userData = {
    username: 'max_mustermann',
    password: 'meinPasswort123',
    email: 'max@example.com'
};

// Validierung durchführen
const { error, value } = schema.validate(userData);

if (error) {
    console.log('Validierungsfehler:', error.details);
} else {
    console.log('Daten sind gültig:', value);
}

In diesem Beispiel haben wir ein Schema für ein Objekt mit drei Feldern erstellt. Die Methode validate() gibt ein Objekt mit zwei Eigenschaften zurück: error (falls Fehler vorhanden) und value (die validierten Daten).

Wichtige Joi-Methoden

1. Joi.string() — String-Validierung

Funktion: Erstellt einen Validator für Zeichenketten. Bietet zahlreiche Methoden zur Prüfung von Länge, Format, Inhalt und anderen Eigenschaften einer Zeichenkette.

Parameter: Keine Parameter. Gibt ein Validator-Objekt zurück, an das Methoden verketten werden können.

Beispiel:

const schema = Joi.string()
    .min(3)           // Mindestlänge 3 Zeichen
    .max(10)          // Maximallänge 10 Zeichen
    .alphanum()       // nur Buchstaben und Zahlen
    .required();      // Pflichtfeld

console.log(schema.validate('Hallo'));    // { value: 'Hallo' }
console.log(schema.validate('Hi'));       // { error: ... } - zu kurze Zeichenkette
console.log(schema.validate('Hallo123')); // { value: 'Hallo123' }
console.log(schema.validate('Hallo!'));   // { error: ... } - enthält Sonderzeichen

2. Joi.number() — Zahlen-Validierung

Funktion: Erstellt einen Validator für numerische Werte. Ermöglicht die Prüfung von Bereich, Ganzzahligkeit, Positivität und anderen Eigenschaften von Zahlen.

Parameter: Keine Parameter. Unterstützt Methodenverkettung zur Konfiguration.

Beispiel:

const schema = Joi.number()
    .integer()       // nur ganze Zahlen
    .min(0)                    

Empfehlungen