Datenvalidierung in JavaScript (Node.js): Joi und Yup
In jeder Webanwendung, insbesondere in Node.js, ist die Überprüfung eingehender Daten eine der Kernaufgaben. Ohne Validierung riskieren Sie Datenbankfehler, Sicherheitslücken (SQL-Injection, XSS) oder ein fehlerhaftes Serververhalten. In diesem Artikel betrachten wir die beiden beliebtesten Bibliotheken zur Validierung: Joi und Yup. Sie erfahren, wie Sie diese installieren, Schemata erstellen und in Express integrieren.
Warum ist serverseitige Validierung notwendig?
Clientseitige Validierung (HTML5 oder JavaScript im Browser) ist praktisch, aber leicht zu umgehen. Daher ist eine serverseitige Überprüfung zwingend erforderlich. Sie stellt sicher, dass:
- Datentypen den Erwartungen entsprechen (String, Zahl, Array).
- Pflichtfelder nicht leer sind.
- Daten die zulässigen Größen nicht überschreiten.
- Formate (E-Mail, URL, Telefon) korrekt sind.
Die Bibliothek Joi
Joi ist ein leistungsstarker Validator von den Entwicklern von Hapi.js. Er unterstützt komplexe Schemata, benutzerdefinierte Fehlermeldungen und asynchrone Prüfungen.
Installation
npm install joiBeispielschema für die Benutzerregistrierung
const Joi = require('joi');
const userSchema = Joi.object({ username: Joi.string() .alphanum() .min(3) .max(30) .required() .messages({ 'string.min': 'Der Benutzername muss mindestens 3 Zeichen lang sein', 'string.max': 'Der Benutzername darf maximal 30 Zeichen lang sein' }), email: Joi.string() .email({ tlds: { allow: false } }) .required(), password: Joi.string() .pattern(new RegExp('^[a-zA-Z0-9]{8,30}$')) .required(), birth_year: Joi.number() .integer() .min(1900) .max(2024)});
// Validierungapp.post('/register', (req, res) => { const { error, value } = userSchema.validate(req.body, { abortEarly: false }); if (error) { return res.status(400).json({ status: 'error', message: error.details.map(d => d.message).join(', ') }); } res.json({ status: 'success', data: value });});Erweiterte Funktionen von Joi
- Array-Validierung:
Joi.array().items(Joi.string()) - Bedingte Regeln:
.when('role', { is: 'admin', then: Joi.required() }) - Benutzerdefinierte Funktionen:
.custom((value, helpers) => { ... })
Die Bibliothek Yup
Yup ist eine leichte und intuitive Bibliothek, die im React-Ökosystem (Formik) beliebt ist. Sie funktioniert aber auch hervorragend auf dem Server.
Installation
npm install yupBeispielschema für den Login
const yup = require('yup');
const loginSchema = yup.object().shape({ email: yup.string() .email('Geben Sie eine gültige E-Mail-Adresse ein') .required('E-Mail ist erforderlich'), password: yup.string() .min(8, 'Das Passwort muss mindestens 8 Zeichen lang sein') .max(50) .required('Passwort ist erforderlich')});
// Middleware für Expressasync function validateLogin(req, res, next) { try { const validatedData = await loginSchema.validate(req.body, { abortEarly: false }); req.validatedData = validatedData; next(); } catch (err) { res.status(400).json({ status: 'error', errors: err.errors // Array von Fehlermeldungen }); }}
app.post('/login', validateLogin, (req, res) => { res.json({ status: 'success', data: req.validatedData });});Besonderheiten von Yup
- Asynchrone Validierung standardmäßig (gibt ein Promise zurück).
- Datentransformation:
.transform((value) => value.tr
Auch in der Bibliothek
Datenvalidierung in C++: Bibliotheken, Methoden und Codebeispiele
TipKit für Swift: Vollständiges Tutorial mit Beispielen
Redis-Client für Go (Golang): go-redis und redigo – vollständiger Leitfaden
Bildverarbeitung in C++: Bibliotheken CImg, OpenCV und Magick++
Geolokalisierung und Karten in PHP: Bibliotheken, APIs und Codebeispiele