Exercice : "Serveur de Citations Inspirantes"

Objectif : Créer un serveur HTTP qui renvoie une citation inspirante aléatoire à chaque requête. Ensuite, introduire Express.js pour améliorer la structure du serveur.

Partie 1: Serveur HTTP Natif

  1. Création du serveur HTTP :

    • Créez un nouveau dossier nommé inspirational_quotes.
    • Ouvrez un terminal, naviguez (cd) dans ce dossier.
    • Créez un fichier server.js.
  2. Script du serveur HTTP :

    • Dans server.js, utilisez le module http pour créer un serveur.
    • Le serveur doit écouter sur le port 3000 et renvoyer une citation inspirante aléatoire à chaque requête.
    const http = require('http');
    
    const quotes = [
      "Life is what happens when you're busy making other plans. – John Lennon",
      "The way to get started is to quit talking and begin doing. – Walt Disney",
      "The future belongs to those who believe in the beauty of their dreams. – Eleanor Roosevelt",
    ];
    
    const server = http.createServer((req, res) => {
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      const randomQuote = quotes[Math.floor(Math.random() * quotes.length)];
      res.end(randomQuote);
    });
    
    const PORT = 3000;
    server.listen(PORT, () => {
      console.log(`Server running on port ${PORT}`);
    });
    

Partie 2: Utilisation d'Express.js

  1. Introduction à Express.js :

    • Installez Express.js en exécutant npm init -y suivi de npm install express.
    • Créez un fichier express_server.js.
  2. Script du serveur avec Express :

    • Dans express_server.js, utilisez Express.js pour créer le même serveur.
    • Ajoutez une route qui gère le chemin /quote et renvoie une citation aléatoire.
    const express = require('express');
    const app = express();
    
    const quotes = [
      "Life is what happens when you're busy making other plans. – John Lennon",
      "The way to get started is to quit talking and begin doing. – Walt Disney",
      "The future belongs to those who believe in the beauty of their dreams. – Eleanor Roosevelt",
    ];
    
    app.get('/quote', (req, res) => {
      const randomQuote = quotes[Math.floor(Math.random() * quotes.length)];
      res.send(randomQuote);
    });
    
    const PORT = 3000;
    app.listen(PORT, () => {
      console.log(`Express server running on port ${PORT}`);
    });
    

Partie 3: Gestion des Requêtes et des Réponses

  1. Gestion avancée :

    • Modifiez express_server.js pour renvoyer une réponse JSON qui contient à la fois la citation et l'auteur.
    • Ajoutez une gestion d'erreur pour les chemins non trouvés.
    app.get('/quote', (req, res) => {
      const randomIndex = Math.floor(Math.random() * quotes.length);
      const randomQuote = quotes[randomIndex].split(' – ');
      res.json({ quote: randomQuote[0], author: randomQuote[1] });
    });
    
    app.use((req, res) => {
      res.status(404).send('404: Page not found');
    });
    

Partie 4: Défi supplémentaire (Optionnel)

  1. Amélioration du serveur :
    • Ajoutez la possibilité de récupérer une citation par son index via un paramètre d'URL (par exemple, /quote/0 pour la première citation).
    • Implémentez une route POST qui permet d'ajouter une nouvelle citation à la liste.

Cet exercice permet aux apprenants de comprendre les bases de la création d'un serveur HTTP en Node.js, de se familiariser avec Express.js, et d'apprendre à gérer les requêtes et les réponses HTTP de manière simple mais significative.

Modifié le: vendredi 3 novembre 2023, 08:59