Correction Exercice : "Serveur de Citations Inspirantes"
Partie 1: Serveur HTTP Natif
- Vérifiez le Serveur HTTP :
- Assurez-vous que le fichier
server.jsexiste et contient le code pour créer un serveur HTTP. - Lancez le serveur avec
node server.jset ouvrez votre navigateur à l'adressehttp://localhost:3000. - À chaque rafraîchissement de la page, une nouvelle citation devrait apparaître.
- Assurez-vous que le fichier
Partie 2: Utilisation d'Express.js
-
Vérifiez l'Installation d'Express :
- Confirmez que le fichier
package.jsonexiste et contientexpressdans les dépendances. - Assurez-vous que le dossier
node_modulescontient le package Express.
- Confirmez que le fichier
-
Vérifiez le Serveur Express :
- Vérifiez que le fichier
express_server.jsexiste et contient le code pour créer un serveur avec Express. - Lancez le serveur avec
node express_server.jset naviguez àhttp://localhost:3000/quote. - La page devrait afficher une citation aléatoire.
- Vérifiez que le fichier
Partie 3: Gestion des Requêtes et des Réponses
-
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" }).
- Lorsque vous accédez à
-
Vérifiez la Gestion des Erreurs :
- Essayez d'accéder à un chemin non existant, comme
/notfound. - Vous devriez recevoir une réponse
404avec le message "404: Page not found".
- Essayez d'accéder à un chemin non existant, comme
Partie 4: Défi supplémentaire (Optionnel)
-
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/0et vérifiez si la première citation est renvoyée.
-
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.jssans 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.jsonvianpm install express, assurez-vous que le dossiernode_modulescontient 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
/quotepour 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
quoteetauthor. - 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');
});