Validation des données en JavaScript (Node.js) : Joi et Yup
Dans toute application web, en particulier sur Node.js, l'une des tâches clés est la vérification des données entrantes. Sans validation, vous risquez des erreurs de base de données, des vulnérabilités (injections SQL, XSS) ou un comportement incorrect du serveur. Dans cet article, nous examinerons les deux bibliothèques de validation les plus populaires : Joi et Yup. Vous apprendrez à les installer, à créer des schémas et à les intégrer avec Express.
Pourquoi une validation côté serveur ?
La validation côté client (HTML5 ou JavaScript dans le navigateur) est pratique, mais elle est facilement contournable. Par conséquent, une vérification côté serveur est obligatoire. Elle garantit que :
- Les types de données correspondent à ceux attendus (chaîne, nombre, tableau).
- Les champs obligatoires ne sont pas vides.
- Les données ne dépassent pas les tailles autorisées.
- Les formats (email, URL, téléphone) sont corrects.
Bibliothèque Joi
Joi est un validateur puissant des créateurs de Hapi.js. Il prend en charge les schémas complexes, les messages d'erreur personnalisés et les vérifications asynchrones.
Installation
npm install joiExemple de schéma pour l'inscription d'un utilisateur
const Joi = require('joi');
const userSchema = Joi.object({ username: Joi.string() .alphanum() .min(3) .max(30) .required() .messages({ 'string.min': 'Le nom d\\'utilisateur doit comporter au moins 3 caractères', 'string.max': 'Le nom d\\'utilisateur ne doit pas dépasser 30 caractères' }), 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)});
// Validationapp.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 });});Fonctionnalités avancées de Joi
- Validation des tableaux :
Joi.array().items(Joi.string()) - Règles conditionnelles :
.when('role', { is: 'admin', then: Joi.required() }) - Fonctions personnalisées :
.custom((value, helpers) => { ... })
Bibliothèque Yup
Yup est une bibliothèque légère et intuitive, populaire dans l'écosystème React (Formik). Mais elle fonctionne également très bien côté serveur.
Installation
npm install yupExemple de schéma pour la connexion
const yup = require('yup');
const loginSchema = yup.object().shape({ email: yup.string() .email('Veuillez saisir un email valide') .required('L\\'email est obligatoire'), password: yup.string() .min(8, 'Le mot de passe doit comporter au moins 8 caractères') .max(50) .required('Le mot de passe est obligatoire')});
// Middleware pour 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 // tableau des messages d'erreur }); }}
app.post('/login', validateLogin, (req, res) => { res.json({ status: 'success', data: req.validatedData });});Caractéristiques de Yup
- Validation asynchrone par défaut (retourne une Promise).
- Transformation des données :
.transform((value) => value.tr
Aussi dans la bibliothèque
Validation des données en Rust : aperçu des bibliothèques et frameworks
Travailler avec CSV en JavaScript (Node.js) : bibliothèques, parsing et génération de données