Node.js a transformé le développement backend en permettant d'utiliser JavaScript côté serveur. Associé à Express, le framework le plus populaire de l'écosystème node, vous pouvez créer des APIs REST robustes et performantes rapidement.
Pourquoi choisir Node.js et Express ?
Node utilise un modèle d'I/O non-bloquant et orienté événements, idéal pour les applications avec beaucoup de connexions simultanées. Express ajoute une couche d'abstraction légère avec routing, middleware et gestion des erreurs sans imposer de structure rigide.
L'écosystème npm offre des milliers de packages pour tout besoin : validation, authentification, ORM, upload de fichiers, envoi d'emails, etc. La productivité est excellente une fois les concepts de base maîtrisés.
Installation et premier serveur
mkdir mon-api && cd mon-api
npm init -y
npm install express dotenv
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/health', (req, res) => {
res.json({ status: 'ok', timestamp: new Date() });
});
app.listen(3000, () => console.log('Serveur démarré sur le port 3000'));
Ce serveur basique répond aux requêtes GET sur /api/health. Avec express.json(), il parse automatiquement les corps de requêtes JSON.
Organisation en routes et controllers
Pour un projet maintenable, séparez les routes des contrôleurs :
// routes/users.js
const router = require('express').Router();
const UserController = require('../controllers/UserController');
router.get('/', UserController.index);
router.get('/:id', UserController.show);
router.post('/', UserController.create);
router.put('/:id', UserController.update);
router.delete('/:id', UserController.destroy);
module.exports = router;
Chaque contrôleur gère la logique métier, le modèle gère l'accès aux données, la route fait le lien. Cette séparation MVC rend le code testable et évolutif.
Middleware : le cœur d'Express
Les middlewares sont des fonctions qui s'exécutent dans la chaîne de traitement des requêtes. Ils peuvent modifier req et res, appeler next() ou terminer la réponse :
const authMiddleware = (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
if (!token) return res.status(401).json({ error: 'Non autorisé' });
try {
req.user = jwt.verify(token, process.env.JWT_SECRET);
next();
} catch {
res.status(403).json({ error: 'Token invalide' });
}
};
Ce middleware d'authentification peut être appliqué à des routes spécifiques ou à toute l'application.
Validation des données avec Joi
Ne jamais faire confiance aux données reçues. Joi est une bibliothèque de validation populaire dans l'écosystème node :
const Joi = require('joi');
const userSchema = Joi.object({
name: Joi.string().min(2).max(50).required(),
email: Joi.string().email().required(),
age: Joi.number().integer().min(18)
});
const { error, value } = userSchema.validate(req.body);
if (error) return res.status(400).json({ error: error.details[0].message });
Gestion des erreurs
Créez un middleware de gestion d'erreurs global :
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(err.statusCode || 500).json({
error: err.message || 'Erreur serveur'
});
});
Toute erreur passée à next(err) sera capturée ici, centralisant la gestion d'erreurs.
Connexion à une base de données
Avec Mongoose pour MongoDB ou Sequelize pour SQL, l'intégration est simple. Utilisez un fichier db.js qui exporte la connexion, et importez-le au démarrage de l'application. Pensez aux variables d'environnement pour les identifiants de connexion.
Pour les bonnes pratiques de sécurité et de performance d'une API node en production, consultez la documentation officielle Express.
Conclusion
Node.js avec Express est une combinaison puissante pour créer des APIs REST modernes. La clé est l'organisation : routes séparées, middlewares réutilisables, validation systématique et gestion d'erreurs centralisée. Une fois ces bases maîtrisées, vous pourrez construire des APIs robustes et scalables pour tous types de projets.
Node.js avec Express est un excellent point de départ, mais les projets grandissants bénéficient d'une structure plus stricte. Adoptez NestJS pour les APIs TypeScript d'envergure avec injection de dépendances et architecture claire. Pour les performances, le module cluster et PM2 exploitent tous les cœurs CPU. La sécurité Express demande helmet pour les headers HTTP, express-rate-limit contre les abus, et une validation stricte des entrées avec Zod ou Joi. Les tests avec Jest et Supertest garantissent la fiabilité de chaque endpoint. La documentation Node.js et le dépôt awesome-nodejs référencent les meilleures bibliothèques de l'écosystème pour tous les besoins serveur.