Validation des données dans Node.js avec Joi
Dans les applications web modernes sous Node.js, la validation des données est une étape critique du traitement des requêtes. Les erreurs dans les données peuvent entraîner des vulnérabilités, un fonctionnement incorrect ou une panne du serveur. L'une des bibliothèques les plus puissantes et populaires pour cette tâche est Joi (prononcé « joï »). Elle permet de décrire des schémas de données et de vérifier leur conformité à des règles définies.
Qu'est-ce que Joi ?
Joi est une bibliothèque pour décrire des schémas et valider des objets JavaScript. Elle est particulièrement populaire dans l'écosystème Node.js, où elle est souvent utilisée avec Express, Hapi ou Fastify. Joi fournit une API simple et expressive pour définir des types, des champs obligatoires, des plages, des expressions régulières et des vérifications personnalisées.
Installation
Installation de Joi via npm :
npm install joiExemple de base
Créons un schéma pour vérifier les données d'un utilisateur :
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('Erreur de validation :', error.details);} else { console.log('Données valides :', value);}Méthodes et règles principales
Joi prend en charge de nombreux types et modificateurs :
- Types de données :
Joi.string(),Joi.number(),Joi.boolean(),Joi.date(),Joi.array(),Joi.object(). - Obligation :
.required()— champ obligatoire. - Contraintes :
.min(),.max(),.length()— pour les chaînes et les tableaux. - Expressions régulières :
.pattern(regex)— vérification par motif. - Email et URL :
.email(),.uri()— validateurs intégrés. - Messages personnalisés :
.messages()— remplacement des erreurs standard.
Validation des objets et tableaux imbriqués
Joi gère parfaitement les structures complexes :
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: 'Avenue Nevski', city: 'SPb', zip: '191011' } ]};
const result = userSchema.validate(userData);console.log(result.error ? result.error.details : 'OK');Gestion des erreurs
En cas d'erreur de validation, Joi retourne un objet error.details — un tableau avec une description détaillée de chaque erreur :
if (result.error) { result.error.details.forEach(detail => { console.log(`Champ : ${detail.path.join('.')}, message : ${detail.message}`); });}Utilisation avec Express
Joi est souvent utilisé dans un middleware pour vérifier les requêtes :
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 Aussi dans la bibliothèque
Traitement d'images en C++ : bibliothèques CImg, OpenCV et Magick++
Envoi de SMS en C++ : API des bibliothèques libcurl et cpprestsdk
Traitement d'images dans Node.js : redimensionnement et recadrage avec Sharp
Travail avec les images en C++ : bibliothèques CImg et STB Image
Travailler avec les dates en JavaScript (Node.js) : les meilleures bibliothèques