Passer au contenu principal

💚 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 ! 💚