Partie 1: Serveur HTTP Natif

  1. Vérifiez le Serveur HTTP :
    • Assurez-vous que le fichier server.js existe et contient le code pour créer un serveur HTTP.
    • Lancez le serveur avec node server.js et ouvrez votre navigateur à l'adresse http://localhost:3000.
    • À chaque rafraîchissement de la page, une nouvelle citation devrait apparaître.

Partie 2: Utilisation d'Express.js

  1. Vérifiez l'Installation d'Express :

    • Confirmez que le fichier package.json existe et contient express dans les dépendances.
    • Assurez-vous que le dossier node_modules contient le package Express.
  2. Vérifiez le Serveur Express :

    • Vérifiez que le fichier express_server.js existe et contient le code pour créer un serveur avec Express.
    • Lancez le serveur avec node express_server.js et naviguez à http://localhost:3000/quote.
    • La page devrait afficher une citation aléatoire.

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

  1. Vérifiez la Réponse JSON :

    • Lorsque vous accédez à /quote, le serveur doit renvoyer une réponse JSON avec la citation et l'auteur.
    • Vérifiez que le format de la réponse est correct (par exemple, { "quote": "Life is what happens when you're busy making other plans.", "author": "John Lennon" }).
  2. Vérifiez la Gestion des Erreurs :

    • Essayez d'accéder à un chemin non existant, comme /notfound.
    • Vous devriez recevoir une réponse 404 avec le message "404: Page not found".

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

  1. Vérifiez la Récupération par Index :

    • Ajoutez la logique nécessaire pour récupérer une citation par son index.
    • Testez en accédant à /quote/0 et vérifiez si la première citation est renvoyée.
  2. Vérifiez l'Ajout de Citation :

    • Implémentez la route POST pour ajouter une nouvelle citation.
    • Utilisez un outil comme Postman ou cURL pour envoyer une requête POST avec une nouvelle citation.
    • Vérifiez que la citation a été ajoutée et peut être récupérée avec les requêtes GET.

Pour chaque partie, assurez-vous que le code est propre, bien organisé et suit les bonnes pratiques de développement. Les erreurs courantes à rechercher incluent les fautes de frappe, les erreurs de syntaxe, les problèmes de routage, et les erreurs de gestion des erreurs. Si tout fonctionne comme prévu, l'exercice est correctement réalisé.

Partie 1: Serveur HTTP Natif

Pour le fichier server.js, le script fourni devrait fonctionner correctement s'il est placé dans un fichier et exécuté avec Node.js. Voici le script avec des commentaires pour la correction :

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}`);
});

 

Corrections :

  • Assurez-vous que Node.js est installé correctement et que vous pouvez exécuter node server.js sans erreurs.
  • Vérifiez que le port 3000 n'est pas utilisé par un autre service sur votre machine.

Partie 2: Utilisation d'Express.js

Pour le fichier express_server.js, le script suivant devrait être fonctionnel :

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}`);
});

 

Corrections :

  • Après avoir ajouté Express à votre package.json via npm install express, assurez-vous que le dossier node_modules contient le package Express.
  • Vérifiez que vous exécutez le bon fichier avec node express_server.js.

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

Pour la gestion des erreurs et la réponse JSON, le script suivant devrait être ajouté à express_server.js :

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');
});

Corrections :

  • Assurez-vous que la réponse JSON est correctement formatée et que le serveur renvoie le bon code d'état pour les erreurs 404.
  • Testez le chemin /quote pour confirmer que la réponse JSON est correctement renvoyée.

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

Pour la récupération de citation par index et l'ajout de nouvelles citations, vous devrez ajouter des routes supplémentaires à express_server.js. Voici un exemple de comment cela pourrait être fait :

// Pour récupérer une citation par son index
app.get('/quote/:index', (req, res) => {
  const index = parseInt(req.params.index);
  if (index >= 0 && index < quotes.length) {
    const selectedQuote = quotes[index].split(' – ');
    res.json({ quote: selectedQuote[0], author: selectedQuote[1] });
  } else {
    res.status(404).send('404: Quote not found');
  }
});

// Pour ajouter une nouvelle citation
app.post('/quote', express.json(), (req, res) => {
  const newQuote = req.body.quote;
  const newAuthor = req.body.author;
  if (newQuote && newAuthor) {
    quotes.push(`${newQuote} – ${newAuthor}`);
    res.status(201).send('Quote added successfully');
  } else {
    res.status(400).send('Bad request');
  }
});

 

Corrections :

  • Pour la route POST, vous aurez besoin d'un client HTTP comme l'extension Rest Client (request.rest),
  • Vous pouvez tester  Postman ou cURL pour tester l'envoi de données.
  • Assurez-vous que les données envoyées sont correctement formatées en JSON avec les clés quote et author.
  • Vérifiez que les nouvelles citations sont ajoutées à la liste et que les citations peuvent être récupérées par index.

request.rest

###
GET http://localhost:3000/quote

###
GET http://localhost:3000/quote/1

###
GET http://localhost:3000/quoteauthor

###
POST http://localhost:3000/quote/add
Content-Type: application/json

{
    "quote": "La vie est bien trop cher !",
    "author": "toto"
}

Correction complète

const express = require('express');
const app = express();
app.use(express.json());

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}`);
});

app.get('/quoteauthor', (req, res) => {
  const randomIndex = Math.floor(Math.random() * quotes.length);
  const randomQuote = quotes[randomIndex].split(' - ');
  res.json({ quote: randomQuote[0], author: randomQuote[1] });
});



// Pour récupérer une citation par son index
app.get('/quote/:index', (req, res) => {
  const index = parseInt(req.params.index);
  if (index >= 0 && index < quotes.length) {
    const selectedQuote = quotes[index].split(' - ');
    res.json({ quote: selectedQuote[0], author: selectedQuote[1] });
  } else {
    res.status(404).send('404: Quote not found');
  }
});



// Pour ajouter une nouvelle citation
app.post('/quote/add', (req, res) => {
  const newQuote = req.body.quote;
  const newAuthor = req.body.author;

  console.log(newQuote + newAuthor);
  if (newQuote && newAuthor) {
    quotes.push(`${newQuote} - ${newAuthor}`);
    res.status(201).send('Quote added successfully');
  } else {
    res.status(400).send('Bad request');
  }
});

app.use((req, res) => {
  res.status(404).send('404: Page not found');
});


 

 

Modifié le: vendredi 1 décembre 2023, 06:50