Récupérer des données dans Express
2.1 Récupération des données
Lorsque l’utilisateur remplit un formulaire et clique sur "Envoyer", son navigateur envoie une requête HTTP ou HTTPS vers le serveur.
Cette requête contient toutes les informations saisies dans le formulaire : par exemple le prénom, le message, ou le contenu d’un article.
Ces données sont transmises selon la méthode définie dans le formulaire (GET
ou POST
), et sont envoyées avec la requête.
Côté client
Le navigateur prend les données du formulaire et les prépare pour les envoyer :
-
soit dans l’URL (si on utilise
GET
), -
soit dans le corps de la requête (si on utilise
POST
).
Côté serveur
Le serveur, lui, reçoit la requête, l’analyse, et en extrait les données.
Grâce à Express, ces données peuvent être représentées sous forme d’objet JavaScript, ce qui les rend faciles à lire, à afficher, ou à utiliser dans un traitement.
Le serveur joue donc le rôle d’interprète : il reçoit une requête contenant des informations, et les convertit en données exploitables dans le code js.
2.2 Traitement des données avec GET
Nous allons maintenant voir comment récupérer les données envoyées par un formulaire GET dans Express.
Exemple de formulaire HTML (méthode GET)
<form action="/bonjour" method="GET">
<label for="prenom">Prénom :</label>
<input type="text" id="prenom" name="prenom">
<button type="submit">Envoyer</button>
</form>
Ce formulaire enverra une requête de ce type au serveur :
Côté serveur : récupérer la donnée dans Express
Dans le fichier server.js
, on définit une route GET correspondant à /bonjour
:
const express = require("express");
const app = express();
const PORT = 3000;
app.get("/bonjour", (req, res) => {
const prenom = req.query.prenom;
res.send(`Bonjour ${prenom} !`);
});
app.listen(PORT, () => {
console.log(`Serveur lancé sur http://localhost:${PORT}`);
});
-
req.query
est un objet contenant toutes les données envoyées dans l’URL. -
Ici,
req.query.prenom
va contenir la valeur tapée dans le champ du formulaire. -
Le serveur répond avec un message personnalisé grâce à
res.send('Bonjour ${prenom} !')
.
Lorsqu’un utilisateur soumet le formulaire, il envoie une requête HTTP au serveur.
La fonction res.send("Bonjour Alice !")
permet au serveur d’envoyer une réponse HTTP contenant le texte "Bonjour Alice !"
au client (le navigateur).
Si l’utilisateur tape "Alice" et clique sur "Envoyer", il verra :
2.3 Traitement des données avec POST
Contrairement à la méthode GET, avec POST, les données ne sont pas visibles dans l’URL.
Elles sont envoyées dans le corps de la requête, de manière invisible pour l’utilisateur.
Voyons comment récupérer ces données dans Express.
Exemple de formulaire HTML (méthode POST)
<form action="/contact" method="POST">
<label for="nom">Nom :</label>
<input type="text" id="nom" name="nom">
<button type="submit">Envoyer</button>
</form>
Côté serveur : récupérer la donnée dans Express
const express = require("express");
const app = express();
const PORT = 3000;
// Middleware nécessaire pour lire les données POST (formulaires HTML)
app.use(express.urlencoded({ extended: true }));
app.post("/contact", (req, res) => {
const nom = req.body.nom;
res.send(`Bonjour ${nom}, votre message a été reçu.`);
});
app.listen(PORT, () => {
console.log(`Serveur démarré sur http://localhost:${PORT}`);
});
-
app.use(express.urlencoded(...))
est un middleware qui permet à Express de lire les données envoyées par un formulaire HTML. -
req.body
contient toutes les valeurs envoyées via POST. -
req.body.nom
permet ici de récupérer la valeur du champ "nom". -
res.send(...)
envoie une réponse HTTP contenant un message personnalisé.
urlencoded
Sans le middleware express.urlencoded(...)
, req.body
serait undefined.
Ce middleware est indispensable pour traiter les données des formulaires POST.
Si l’utilisateur entre "Alice" et clique sur "Envoyer", il recevra comme réponse :
2.4 Envoyer une réponse
Dans les sections précédentes, nous avons déjà vu que le serveur peut répondre à une requête du client avec la méthode res.send(...)
.
C’est grâce à cela que nous avons pu afficher un message simple comme :
Mais il existe plusieurs façons d’envoyer une réponse au client.
Envoyer directement du HTML via res.send()
Il est tout à fait possible d’envoyer du code HTML directement depuis le serveur.
Cela fonctionne, mais :
-
ce n’est pas très pratique pour de longues pages HTML,
-
le code HTML est mélangé avec le JavaScript du serveur,
-
difficile à maintenir sur le long terme
À utiliser pour des messages très simples uniquement.
Rediriger vers une autre page HTML
Une solution plus propre est de rediriger le client vers un fichier HTML statique, que l’on aura placé dans le dossier public/
.
Dans ce cas, le serveur demande au navigateur d’aller chercher la page /merci.html
. Le problème est que dans ce cas nous n'envoyons aucune information contenu dans le formulaire...
Rediriger vers une page HTML + transmettre des données simples
Il est possible de transmettre des données dans l’URL pour qu’une page HTML dynamique (grâce à JavaScript) les récupère.
Dans la page resultat.html
, un script JavaScript peut alors lire la valeur depuis l’URL et adapter l’affichage :
const params = new URLSearchParams(window.location.search);
const nom = params.get("nom");
document.getElementById("message").textContent = `Bonjour ${nom} !`;
Ce script est à mettre dans le frontend et non pas dans le fichier backend (server.js).
Limites :
-
Données visibles dans l’URL
-
Impossible d’envoyer des objets complexes
-
Pas sécurisé pour des informations sensibles
D'autres méthodes sont possibles pour outre-passer ces limites, comme l'utilisation de AJAX, néanmoins il s'agit là de fonctionnalité plus avancée que nous ne verrons pas dans le cadre de ce cours.
2.5 Lire les informations dans l’URL côté client
Il peut arriver que le serveur veuille transmettre une information à une page HTML, sans passer par AJAX ou stockage local.
Une méthode simple consiste à ajouter des paramètres dans l’URL (par exemple après une redirection), et à les lire ensuite côté client avec JavaScript.
Exemple d’URL avec paramètres :
Cette URL contient l'adresse de la page html à affichéresultat.html
et également deux paramètres user
dont la valeur est John
et l'id
dont la valeur est 123
. À partir de cette URL il est possible de récupérer ces paramètres en utilisant simplement un code JS côté client (c'est-à-dire sans utiliser node.js)
Code JS pour lire ces paramètres
const urlParams = new URLSearchParams(window.location.search);
const user = urlParams.get("user"); // 'John'
const id = urlParams.get("id"); // '123'
console.log(user, id);
Explication
-
window.location.search récupère la partie de l’URL après le ? (appelée query string)
-
URLSearchParams permet d’analyser cette partie et d’accéder facilement aux différentes valeurs envoyées
-
Vous pouvez ensuite utiliser ces valeurs pour personnaliser l’affichage de la page
À quoi ça sert ?
Cela peut être un moyen simple pour le serveur d’envoyer une information au frontend, sans recharger de données ni utiliser de base de données. Par exemple :
-
Afficher un message personnalisé (Bonjour John !)
-
Charger un élément en fonction d’un ID
-
Adapter le contenu ou l’apparence de la page
Attetntion
Attention : les données envoyées dans l’URL sont visibles par tout le monde. Ce n’est pas une méthode sécurisée, et elle a des limitations (taille, confidentialité…). Une façon plus sécurisée de faire serait, par exemple, d'utiliser AJAX.