Express 01 - đšđ»âđ DĂ©couverte d'Express
â ïž Avant de commencer cette quĂȘte, nous te conseillons de regarder celle-ci :
Introduction
Précédemment, nous avons vu comment créer un serveur en utilisant Node.js et le module http.
Cependant, crĂ©er un serveur en utilisant le module "http" peut devenir compliquĂ©. Dans cette quĂȘte, nous allons dĂ©couvrir comment crĂ©er un serveur en utilisant Express.
Express est un framework pour Node.js qui nous donne accÚs à des outils puissants et simples que nous pouvons utiliser pour créer et configurer notre serveur rapidement.
En suivant les quĂȘtes de ce module, tu vas construire pas Ă pas le prototype d'une application serveur. Au final, ton application pourra gĂ©rer des requĂȘtes liĂ©es Ă une base de donnĂ©es de films et d'utilisateurs. Commençons ! đ

đ€ Dans cette quĂȘte, tu vas apprendre comment :
â Installer et configurer Express â IntĂ©grer Express dans une application NodeJS â CrĂ©er ta premiĂšre sĂ©rie de routes en utilisant Express
âïž Installation
Ătape 1 : Commence par ouvrir ton terminal et par crĂ©er un rĂ©pertoire :
mkdir express-app
Ătape 2 : Navigue dans ce rĂ©pertoire :
cd express-app
Ătape 3 : Initialise ton projet :
npm init -y
đđ» On peut utiliser le flag -y pour utiliser les valeurs par dĂ©faut pour notre
package.json
Ătape 4 : Maintenant que le projet est initialisĂ©, installe Express :
npm install express
đŻ Bien jouĂ© ! Tu peux maintenant utiliser Express!
đđ»N'hĂ©site pas Ă regarder la documentation d'express et Ă la sauvegarder dans tes favoris au cas oĂč tu oublierais comment installer express.
Installation d'express
đïž CrĂ©er ton application express
Ătape 1 : CrĂ©e un fichier javascript pour contenir tout le code de ton application. Appelons-le index.js. Dans ce fichier, importe express :
const express = require('express');
Ătape 2 : CrĂ©e une application en appelant le module express. La convention est de l'appeler app :
const app = express();
âĄïž Maintenant, nous avons accĂšs Ă de nombreuses mĂ©thodes express en utilisant app.METHOD (ex : app.get(), app.post(), etc...)
đđ» Tu peux trouver la liste des mĂ©thodes disponibles sur la documentation d'express.
Ătape 3 : CrĂ©e une constante pour stocker le numĂ©ro du port sur lequel ton serveur sera disponible. Pour cet exemple, utilisons le port 5000.
const port = 5000;
Ătape 4 : Maintenant, tu dois Ă©couter les connexions entrantes. Pour cela, utilise app.listen.
app
.listen(port, () => {
console.info(`Server is listening on port ${port}`);
})
.on("error", (err) => {
console.error("Error:", err.message);
});
Ătape 5 : Utilise ton terminal (assure-toi que tu es dans le bon rĂ©pertoire) et exĂ©cute node index.js
âĄïž Tu devrais voir Server is listening on port 5000.
Ătape 6 : Maintenant, va dans ton navigateur et accĂšde Ă localhost:5000 ; Tu devrais voir "Cannot GET /".

âĄïž Cette erreur est normale, nous avons créé le serveur, mais nous n'avons pas encore de routes. Tu vas devoir ajouter plus de code dans ton application et recharger le serveur (ce qui signifie l'arrĂȘter en utilisant Ctrl+C et exĂ©cuter Ă nouveau la commande node).
ïžâïž Installer Nodemon
Recharger ton serveur tout le temps peut ĂȘtre assez ennuyeux, pour Ă©viter cela, tu peux utiliser un paquet Node appelĂ© Nodemon.
Nodemon écoutera les changements dans tes fichiers et redémarrera automatiquement le serveur.

Ătape 1 : Installer nodemon en utilisant npm.
npm install nodemon --save-dev
âđ» Nous devons installer nodemon dans les dĂ©pendances de dĂ©veloppement, car nous n'utiliserons nodemon que lorsque nous dĂ©velopperons notre projet. Nous ne voulons pas que ce paquet soit installĂ© et utilisĂ© en production.
Ătape 2: Adapte ton package.json, en modifiant "main" et "scripts" :
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
C'est une pratique courante de réserver le script start pour la prodution, et d'avoir un script dev pour le développement : ici, le script dev exécutera nodemon au lieu de node.
Ătape 3: Utilise npm run dev pour dĂ©marrer le serveur.

đŁïž CrĂ©er une route

Le routage consiste Ă dĂ©terminer comment une application rĂ©pond Ă une requĂȘte du client vers une route de l'application. On parle Ă©galement de "point d'entrĂ©e", ou endpoint en anglais. Un point d'entrĂ©e est un chemin d'URL (
/,/about,contact, etc.) associĂ© une mĂ©thode de requĂȘte HTTP spĂ©cifique (GET, POST, etc.).
La définition des routes devrait ressembler à ceci :
app.METHOD(PATH, HANDLER)
-
app est une instance d'Express.
-
METHOD est une mĂ©thode de requĂȘte HTTP. (GET, POST, PUT, DELETE)
-
PATH est un chemin sur le serveur.
-
HANDLER est la fonction exécutée lorsque le chemin est reconnu
Créons une route GET !
Quand quelqu'un fait une requĂȘte GET vers la racine de notre serveur, nous voulons envoyer comme rĂ©ponse "Welcome to Express". Donc en partant de app.METHOD(PATH, HANDLER) :
- La METHOD est
get:
app.get(PATH, HANDLER);
- Le PATH est
/:
app.get("/", HANDLER)
- Le HANDLER doit envoyer
"Welcome to Express":
app.get("/", (req, res) => {
res.send("Welcome to Express");
});
Voici le code que tu devrais avoir :
const express = require("express");
const app = express();
const port = 5000;
app.get("/", (req, res) => {
res.send("Welcome to Express");
});
app
.listen(port, () => {
console.info(`Server is listening on port ${port}`);
})
.on("error", (err) => {
console.error("Error:", err.message);
});
Maintenant, va sur localhost:5000 : tu dois voir "Welcome to Express" s'afficher.
đ€ Allons plus loin:

âïž HANDLER
Le HANDLER est une fonction exĂ©cutĂ©e lorsque la route est dĂ©clenchĂ©e par une requĂȘte. Tu verras souvent dans la documentation ou les forums cette fonction "fusionnĂ©e" avec la dĂ©claration de la route :
app.get('/search', (req, res) => {});
Jusqu'à ce que tu sois vraiment à l'aise avec Express, il est important de séparer dans ton esprit la déclaration de la route et le HANDLER. C'est pourquoi nous préférerons dans ce module écrire :
const handler = (req, res) => {};
app.get("/search", handler);
Le HANDLER prend 2 paramÚtres, correspondant à 2 objets HTTP définis dans Express :
-
un objet de type Request (par convention, le paramÚtre est appelé
requestou plus souventreq) -
un objet de type Response (par convention, le paramÚtre est appelé
responseou plus souventres)
Chacun de ces objets a de nombreuses méthodes et propriétés.
ex: response.send("Welcome to Express");
âRequest
L'objet de requĂȘte reprĂ©sente la requĂȘte HTTP. Il contient des informations telles que :
-
l'en-tĂȘte HTTP,
-
Le corps de la requĂȘte (ce qui est envoyĂ© avec la requĂȘte),
-
Données de formulaire,
-
ParamĂštres de l'URL et query string, ...
Tu peux vĂ©rifier toutes les mĂ©thodes et propriĂ©tĂ©s disponibles pour l'objet de requĂȘte sur la documentation d'Express :
Express - API Reference - Express.js
req.params
Tu peux capturer certaines valeurs de l'URL en utilisant req.params. Imaginons que tu veuilles accéder à un profil d'utilisateur spécifique, en utilisant son nom comme référence.
Tu peux marquer la présence d'un paramÚtre dans le path de la route : on accédera à la valeur de ce paramÚtre en utilisant req.params.
Faisons cela ! Créons une nouvelle route :
const welcomeName = (req, res) => {
res.send(`Welcome ${req.params.name}`);
};
app.get("/users/:name", welcomeName);
La partie :name est le marqueur d'un paramÚtre : : est le préfixe qui marque un paramÚtre, name est ici le nom du paramÚtre (le nom d'un utilisateur dans notre exemple). Maintenant, navigue vers localhost:5000/users/Bob. Tu devrais voir "Welcome Bob".
Change le nom Ă la fin de l'url et tu devrais voir un nouveau nom quand la page se rafraĂźchit.
Voir le code complet|||javascript||||||0|||Cacher le code complet
const express = require("express");
const app = express();
const port = 5000;
const welcome = (req, res) => {
res.send("Welcome to Express");
};
app.get("/", welcome);
const welcomeName = (req, res) => {
res.send(`Welcome ${req.params.name}`);
};
app.get("/users/:name", welcomeName);
app
.listen(port, () => {
console.info(`Server is listening on port ${port}`);
})
.on("error", (err) => {
console.error("Error:", err.message);
});
âResponse
L'objet response reprĂ©sente la rĂ©ponse HTTP que le serveur envoie au client. Il peut contenir des donnĂ©es, des messages (validation, erreur), ou simplement un Ă©tat correspondant Ă l'Ă©tat de la requĂȘte traitĂ©e par le serveur.Â
Tu peux vĂ©rifier toutes les mĂ©thodes et propriĂ©tĂ©s disponibles pour l'objet de requĂȘte sur la documentation d'Express :
http://expressjs.com/fr/4x/api.html#res
Voici quelques méthodes utiles de l'objet Response :
- res.send permet d'envoyer des données (String, Object, Array, Buffer)
(req, res) => {
res.send(âValidatedâ);
};
- res.status pour joindre un message de statut dans la réponse. Généralement combiné avec le "send"
(req, res) => {
res.status(404).send(âCannot find /fooâ);
};
- res.sendStatus pour n'envoyer que le statut de la requĂȘte
(req, res) => {
res.sendStatus(200);
};
- res.json pour envoyer un objet au format JSON
(req, res) => {
res.json({ result: â10 items foundâ });
};
- res.end permet de terminer la requĂȘte sans envoyer de donnĂ©es particuliĂšres.
(req, res) => {
res.end(); // or res.status(404).end();
};
Habituellement, quand nous créons un serveur, nous utilisons une réponse formatée en JSON. Imaginons que l'utilisateur veuille accéder à un catalogue de cocktails.
En accédant à /api/cocktails le serveur lui renverra un JSON avec tous les cocktails disponibles.
const cocktails = [
{
id: 1,
name: "Margarita",
},
{
id: 2,
name: "Mojito",
},
{
id: 3,
name: "Cuba Libre",
},
];
const getCocktails = (req, res) => {
res.status(200).json(cocktails);
};
app.get("/api/cocktails", getCocktails);
AccĂšde Ă localhost:5000/api/cocktails et tu devrais voir la liste des cocktails au format JSON !Â

Fan de Chrome
Tu peux utiliser l'extension jsonformatter sur chrome pour rendre le json plus lisible ! Tu peux trouver l'extension ici.
đ Voici une liste de ressources que tu devrais mettre en favoris :
Documentation on the Response object
Documentation on the Request object
Tutorial on Node and Express
đȘ Challenge
Créer des routes express
Pour ce challenge, pars de cette app :
const express = require("express");
const app = express();
const port = 5000;
const movies = [
{
id: 1,
title: "Citizen Kane",
director: "Orson Wells",
year: "1941",
color: false,
duration: 120,
},
{
id: 2,
title: "The Godfather",
director: "Francis Ford Coppola",
year: "1972",
color: true,
duration: 180,
},
{
id: 3,
title: "Pulp Fiction",
director: "Quentin Tarantino",
year: "1994",
color: true,
duration: 180,
},
];
app
.listen(port, () => {
console.info(`Server is listening on port ${port}`);
})
.on("error", (err) => {
console.error("Error:", err.message);
});
Ton défi est de :
- CrĂ©er une route GETÂ
/, qui doit renvoyer"Welcome to my favourite movie list" - Créer une route GET
/api/movies, cette route doit renvoyer un état 200 et une liste de films au format json (utilise le tableaumoviesdéclaré dans l'app ;) ) - Créer une route GET
/api/movies/:idqui ne retournera que le film correspondant à l'id défini dans l'url (tu peux parcourir le tableaumoviesavec une bouclefor, ou utiliser la méthode .find())- S'il y a un film qui correspond aux paramÚtres, renvoie une réponse avec un statut
200et le film correspondant comme objet json - Sinon, renvoie un statut
404avec un message"Not Found".
- S'il y a un film qui correspond aux paramÚtres, renvoie une réponse avec un statut
Poste le code de ton fichier index.js en solution.
đ§ CritĂšres de validation
- [ ] Le serveur fonctionne
- [ ] L'url
/affiche"Welcome to my favourite movie list" - [ ] L'url
/api/moviesaffiche la liste des films au format json - [ ] L'url
/api/movies/2affiche le film The Godfather au format json - [ ] L'url
/api/movies/5affiche Not found
==$==
Ce que tu devrais avoir dans :
const express = require("express");
const app = express();
const port = 5000;
const welcome = (req, res) => {
res.send("Welcome to my favourite movie list");
};
app.get("/", welcome);
const movies = [
{
id: 1,
title: "Citizen Kane",
director: "Orson Wells",
year: "1941",
color: false,
duration: 120,
},
{
id: 2,
title: "The Godfather",
director: "Francis Ford Coppola",
year: "1972",
color: true,
duration: 180,
},
{
id: 3,
title: "Pulp Fiction",
director: "Quentin Tarantino",
year: "1994",
color: true,
duration: 180,
},
];
const getMovies = (req, res) => {
res.json(movies);
};
app.get("/api/movies", getMovies);
const getMovieById = (req, res) => {
const id = parseInt(req.params.id);
const movie = movies.find((movie) => movie.id === id);
if (movie != null) {
res.json(movie);
} else {
res.status(404).send("Not Found");
}
};
app.get("/api/movies/:id", getMovieById);
app
.listen(port, () => {
console.info(`Server is listening on port ${port}`);
})
.on("error", (err) => {
console.error("Error:", err.message);
});
Ressources partagĂ©es sur cette quĂȘte
- Vidéo Graven - Les Rest Api en 5 minhttps://www.youtube.com/watch?v=VGquimhWT8o