Datenvalidierung in Node.js mit Joi: Vollständige Anleitung

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

Datenvalidierung in Node.js mit Joi

In modernen Webanwendungen mit Node.js ist die Datenvalidierung ein kritischer Schritt bei der Verarbeitung von Anfragen. Fehler in den Daten können zu Sicherheitslücken, Fehlfunktionen oder Serverabstürzen führen. Eine der leistungsstärksten und beliebtesten Bibliotheken für diese Aufgabe ist Joi (ausgesprochen wie „dschoi“). Sie ermöglicht es, Datenschemata zu beschreiben und deren Übereinstimmung mit festgelegten Regeln zu überprüfen.



Was ist Joi?

Joi ist eine Bibliothek zur Beschreibung von Schemata und zur Validierung von JavaScript-Objekten. Sie ist besonders beliebt im Node.js-Ökosystem, wo sie häufig zusammen mit Express, Hapi oder Fastify verwendet wird. Joi bietet eine einfache und ausdrucksstarke API zur Festlegung von Typen, Pflichtfeldern, Bereichen, regulären Ausdrücken und benutzerdefinierten Prüfungen.



Installation

Installation von Joi über npm:

npm install joi


Basisbeispiel

Erstellen wir ein Schema zur Überprüfung von Benutzerdaten:

const Joi = require('joi');

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'] } })});

const data = { username: 'user123', password: 'pass123', email: 'user@example.com'};

const { error, value } = schema.validate(data);

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


Wichtige Methoden und Regeln

Joi unterstützt viele Typen und Modifikatoren:

  • Datentypen: Joi.string(), Joi.number(), Joi.boolean(), Joi.date(), Joi.array(), Joi.object().
  • Pflichtfelder: .required() — das Feld ist erforderlich.
  • Einschränkungen: .min(), .max(), .length() — für Zeichenketten und Arrays.
  • Reguläre Ausdrücke: .pattern(regex) — Prüfung nach einem Muster.
  • E-Mail und URL: .email(), .uri() — integrierte Validatoren.
  • Benutzerdefinierte Nachrichten: .messages() — Ersetzung von Standardfehlern.


Validierung von verschachtelten Objekten und Arrays

Joi kommt gut mit komplexen Strukturen zurecht:

const addressSchema = Joi.object({    street: Joi.string().required(),    city: Joi.string().required(),    zip: Joi.string().pattern(/^\\d{5}$/)});

const userSchema = Joi.object({ name: Joi.string().required(), age: Joi.number().integer().min(18).max(120), addresses: Joi.array().items(addressSchema).min(1)});

const userData = { name: 'Anna', age: 25, addresses: [ { street: 'Newski-Prospekt', city: 'SPb', zip: '191011' } ]};

const result = userSchema.validate(userData);console.log(result.error ? result.error.details : 'OK');


Fehlerbehandlung

Bei einem Validierungsfehler gibt Joi ein Objekt error.details zurück — ein Array mit detaillierter Beschreibung jedes Fehlers:

if (result.error) {    result.error.details.forEach(detail => {        console.log(`Feld: ${detail.path.join('.')}, Nachricht: ${detail.message}`);    });}


Verwendung mit Express

Joi wird häufig in Middleware zur Überprüfung von Anfragen verwendet:

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

app.use(express.json());

const validateUser = (req, res, next) => { const schema = Joi.object({ name: Joi.string().required(), email: Joi.string().email().required() }); const { e

Empfehlungen