Introduction
Créer un serveur backend est une étape essentielle dans le développement web. C’est lui qui gère les requêtes des utilisateurs, l’accès aux données et l’interaction avec les bases de données. Contrairement aux serveurs traditionnels comme Apache ou Nginx, Node.js permet de gérer ces requêtes directement avec JavaScript, offrant une solution rapide et efficace.
Dans cet article, nous allons voir comment structurer un serveur backend en Node.js, gérer les requêtes HTTP et organiser le code de manière claire et évolutive.
1. Pourquoi utiliser Node.js pour un serveur backend ?
Node.js est conçu pour traiter un grand nombre de requêtes simultanément. Contrairement aux architectures classiques où chaque requête utilise un thread distinct, Node.js fonctionne avec un modèle événementiel non bloquant, ce qui lui permet d’être rapide et évolutif (Node.js, https://nodejs.org/en/docs/guides/getting-started-guide, page consultée le 14 février 2025).
Cela signifie que même si une requête prend du temps à être exécutée (par exemple, une requête à une base de données), le serveur continue de traiter d’autres requêtes en parallèle, optimisant ainsi les performances.
Les avantages de Node.js pour le backend
✅ Utilisation de JavaScript sur tout le projet (frontend et backend).
✅ Grande rapidité grâce à son modèle asynchrone.
✅ Facilité d’apprentissage et large communauté.
✅ Idéal pour les APIs et applications en temps réel (chat, streaming).
2. Création d’un serveur Node.js avec Express
Créer un serveur en pur Node.js est possible, mais vite complexe. C’est pourquoi Express.js, un framework léger, est souvent utilisé pour simplifier la gestion des requêtes HTTP (Express.js, https://expressjs.com/fr/, page consultée le 14 février 2025).
Installation d’Express et mise en place du projet
1️⃣ Créer un projet Node.js
mkdir mon-serveur
cd mon-serveur
npm init -y
2️⃣ Installer Express.js
npm install express
3️⃣ Créer un fichier server.js
et ajouter le code suivant :
const express = require('express');
const app = express();
app.use(express.json()); // Middleware pour traiter les requêtes JSON
// Route principale
app.get('/', (req, res) => {
res.send('Bienvenue sur mon serveur Node.js !');
});
// Démarrage du serveur
app.listen(3000, () => {
console.log('Serveur démarré sur http://localhost:3000');
});
4️⃣ Lancer le serveur
node server.js
En accédant à http://localhost:3000/, on obtient une réponse du serveur.
3. Gérer les requêtes HTTP : GET, POST, PUT, DELETE
Une API backend doit permettre d’effectuer différentes opérations sur les données. Avec Express, la gestion des routes et des requêtes est simple.
Exemple d’API CRUD avec Express
Dans server.js, ajoutons des routes pour manipuler une liste d’utilisateurs :
const utilisateurs = [
{ id: 1, nom: 'Alice' },
{ id: 2, nom: 'Bob' }
];
// Récupérer tous les utilisateurs (GET)
app.get('/api/utilisateurs', (req, res) => {
res.json(utilisateurs);
});
// Ajouter un utilisateur (POST)
app.post('/api/utilisateurs', (req, res) => {
const nouvelUtilisateur = req.body;
utilisateurs.push(nouvelUtilisateur);
res.status(201).json({ message: 'Utilisateur ajouté', utilisateur: nouvelUtilisateur });
});
// Modifier un utilisateur (PUT)
app.put('/api/utilisateurs/:id', (req, res) => {
const id = parseInt(req.params.id);
const utilisateur = utilisateurs.find(u => u.id === id);
if (utilisateur) {
utilisateur.nom = req.body.nom;
res.json({ message: 'Utilisateur mis à jour', utilisateur });
} else {
res.status(404).json({ message: 'Utilisateur non trouvé' });
}
});
// Supprimer un utilisateur (DELETE)
app.delete('/api/utilisateurs/:id', (req, res) => {
const id = parseInt(req.params.id);
const index = utilisateurs.findIndex(u => u.id === id);
if (index !== -1) {
utilisateurs.splice(index, 1);
res.json({ message: 'Utilisateur supprimé' });
} else {
res.status(404).json({ message: 'Utilisateur non trouvé' });
}
});
Explication
🔹 GET /api/utilisateurs
→ Retourne la liste des utilisateurs.
🔹 POST /api/utilisateurs
→ Ajoute un utilisateur avec les données envoyées.
🔹 PUT /api/utilisateurs/:id
→ Met à jour le nom d’un utilisateur en fonction de son ID.
🔹 DELETE /api/utilisateurs/:id
→ Supprime un utilisateur en fonction de son ID.
Ces routes permettent de gérer toutes les actions courantes sur des données, ce qui est essentiel pour toute API RESTful.
4. Structurer un projet backend pour une meilleure organisation
Dans une application plus complexe, il est important de bien organiser son code pour éviter qu’il ne devienne ingérable. Une approche courante consiste à séparer les routes, les contrôleurs et les modèles.
Organisation recommandée d’un projet Node.js
mon-serveur/
│── server.js # Fichier principal du serveur
│── routes/
│ ├── utilisateurs.js # Fichier contenant les routes API
│── controllers/
│ ├── utilisateursController.js # Contient la logique métier
│── models/
│ ├── utilisateur.js # Définit la structure des données
│── package.json # Dépendances et configuration du projet
Pourquoi organiser son code ainsi ?
✅ Lisibilité améliorée → Chaque fichier a une responsabilité précise.
✅ Facilité de maintenance → On peut modifier une partie du code sans impacter tout le projet.
✅ Scalabilité → L’application peut grandir sans devenir chaotique.
5. Sécuriser son serveur backend
Un serveur Node.js exposé sur internet doit être sécurisé. Voici quelques bonnes pratiques essentielles :
✔ Valider les entrées utilisateur pour éviter les injections SQL/XSS.
✔ Gérer les erreurs proprement avec des réponses claires.
✔ Limiter les requêtes pour éviter les attaques DDoS (ex. express-rate-limit
).
✔ Utiliser HTTPS pour sécuriser les échanges.
6. Sources
- Node.js - Documentation officielle : https://nodejs.org/en/docs/guides/getting-started-guide (page consultée le 14 février 2025).
- Express.js - Documentation : https://expressjs.com/fr/ (page consultée le 14 février 2025).
- MDN Web Docs - Introduction aux APIs REST : https://developer.mozilla.org/fr/docs/Learn/Server-side/Express_Nodejs (page consultée le 14 février 2025).
Commentaires3
J'adore Node.js
Bonne article ! Il explique clairement pourquoi Node.js est une excellente option pour un serveur backend, en mettant en avant sa rapidité et sa capacité à gérer des requêtes simultanées. J'adore la façon dont tu guide pas à pas pour créer un serveur avec Express, c’est super accessible, même pour les débutants. Les exemples d’API CRUD sont excellents pour comprendre comment manipuler des données facilement. Et le meilleur, c’est l'organisation du projet : séparer les routes, les contrôleurs et les modèles, c’est la clé pour garder un code propre et évolutif. Vraiment une super ressource pour démarrer !
Où rajouter la couche de données ou de service ?
Je trouve que la structure d'organisation que tu nous as présentée est bonne et intéressante, mais je suis curieux de savoir où l'on gère les données ou les services dans un projet Node.js.
Commentaire et question
Tu expliques clairement les concepts clés et donnes des exemples concrets, mais il y a une chose que je n'ai pas comprise : peux-tu expliquer plus en détail comment fonctionne Express.js en arrière-plan ?