Validation des données dans Node.js avec Joi : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 joi


Exemple 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

Recommendations