💚 Qu'est-ce que Node.js ?
📖 Définition
Node.js est un environnement d'exécution JavaScript construit sur le moteur V8 de Chrome. Il permet l'exécution de JavaScript en dehors des navigateurs avec une architecture asynchrone basée sur les événements pour des performances élevées et une évolutivité. Fournit un vaste écosystème de bibliothèques via npm (Node Package Manager).
🎯 Analogie simple
Cuisine de restaurant
Serveur traditionnel (Synchrone)
└─ Un chef sert les clients un par un (lent)
Node.js (Asynchrone)
├─ Un chef gère plusieurs commandes simultanément
├─ Pendant la cuisson du steak → préparer la salade
└─ Rapide et efficace !
⚙️ Boucle d'événements
┌─────────────┐
│ Call Stack │ Code en cours d'exécution
└──────┬──────┘
│
┌──────▼──────┐
│ Event Loop │ Coordinateur
└──────┬──────┘
│
┌────┴─────┐
│ │
Microtask Task Queue
(Promise) (setTimeout)
💡 Exemples clés
Serveur HTTP de base
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>Bonjour, Node.js !</h1>');
});
server.listen(3000, () => {
console.log('Serveur en cours d\'exécution sur http://localhost:3000');
});
API Express
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/users', (req, res) => {
res.json([
{ id: 1, name: 'Pierre' },
{ id: 2, name: 'Marie' }
]);
});
app.post('/api/users', (req, res) => {
const newUser = req.body;
res.status(201).json({ message: 'Créé', user: newUser });
});
app.listen(3000);
Async/Await
const fs = require('fs').promises;
// ❌ Séquentiel (lent)
async function readSequential() {
const file1 = await fs.readFile('file1.txt');
const file2 = await fs.readFile('file2.txt');
// Total : 200ms
}
// ✅ Parallèle (rapide)
async function readParallel() {
const [file1, file2] = await Promise.all([
fs.readFile('file1.txt'),
fs.readFile('file2.txt')
]);
// Total : 100ms (concurrent)
}
Intégration de base de données
const express = require('express');
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb'
});
app.get('/api/users', async (req, res) => {
try {
const [rows] = await pool.execute('SELECT * FROM users');
res.json(rows);
} catch (error) {
res.status(500).json({ error: 'Erreur de base de données' });
}
});
🤔 Questions fréquentes
Q1. Pourquoi Node.js est rapide ?
// E/S non bloquantes
readFile('file.txt', (err, data) => {
processData(data);
});
// Peut gérer d'autres requêtes pendant la lecture !
// Basé sur les événements
// Un seul thread gère des milliers de connexions
// Pas de surcharge de changement de contexte
Q2. Qu'est-ce que npm ?
# Gestionnaire de paquets pour Node.js
npm install express # Installer un paquet
npm init -y # Initialiser un projet
npm list # Lister les paquets installés
npm audit # Vérification de sécurité
# package.json
{
"dependencies": {
"express": "^4.18.0"
}
}
Q3. CommonJS vs Modules ES ?
// CommonJS (traditionnel)
const { add } = require('./math');
module.exports = { add };
// Modules ES (moderne)
import { add } from './math.js';
export function add(a, b) { return a + b; }
// Activer dans package.json
{ "type": "module" }
🎬 Résumé
- E/S asynchrones: Hautes performances et évolutivité
- JavaScript: Même langage que le frontend
- npm: Vaste écosystème de paquets
- Boucle d'événements: Traitement concurrent efficace
Devenez développeur full-stack avec Node.js ! 💚