ExpressJS:cookies

Les cookies sont des données de petite taille de type key-value stockées chez le lien dans le navigateur,avec ExpressJs on peut gérer les cookies :
  1. Recevoir les cookies via  request du client
  2. Envoyer des cookies au client via Response

Installer cookie-parser

npm install cookie-parser --save

routage.js

/*importer la bilbiothèque exprejss*/
const express = require('express')
/*Créer une instance du module Router */
let app = express.Router()

/***1***/
/*importer le middleware cookie-parser*/
var cookieParser = require('cookie-parser');  
app.use(cookieParser());  

/**2**/
app.get('/saveCookie',function(req, res){  
res.cookie('promotion', '20%');  
res.cookie('theme', 'white');  
res.send('Server response');
});


/**3**/
//récupérer les cookies from le client
app.get('/cookies', function(req, res) {  
  res.send("cookies reçues "+JSON.stringify(req.cookies));  
});  
 

//.....

//n'importe quelle autre route
app.get('*', function(req, res){
   res.send('404 route not found');
});

module.exports = app


Exemple2
Serveur.js

const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();

// Utilise le middleware cookie-parser pour faciliter la manipulation des cookies
app.use(cookieParser());

// Route pour définir un cookie
app.get('/set-cookie', (req, res) => {
  // Définit un cookie avec le nom 'user' et la valeur 'John Doe'
  res.cookie('user', 'John Doe', { maxAge: 900000, httpOnly: true });
  // maxAge : Durée de vie du cookie en millisecondes (ici, 15 minutes)
  // httpOnly : Empêche l'accès au cookie via JavaScript côté client (sécurité)
  
  // Envoie une réponse indiquant que le cookie a été défini
  res.send('Cookie défini avec succès !');
});

// Route pour lire le cookie défini précédemment
app.get('/get-cookie', (req, res) => {
  // Récupère la valeur du cookie 'user'
  const username = req.cookies.user;
  
  // Vérifie si le cookie existe
  if (username) {
    // Si le cookie existe, envoie une réponse avec le nom d'utilisateur
    res.send(`Bonjour, ${username} !`);
  } else {
    // Si le cookie n'existe pas, envoie un message indiquant qu'aucun cookie n'a été trouvé
    res.send('Aucun cookie trouvé.');
  }
});

// Route pour effacer le cookie
app.get('/clear-cookie', (req, res) => {
  // Efface le cookie en le remplaçant par un cookie expiré
  res.clearCookie('user');
  
  // Envoie une réponse indiquant que le cookie a été effacé
  res.send('Cookie effacé avec succès !');
});

// Démarrage du serveur sur le port 3000
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Serveur Express en cours d'exécution sur le port ${PORT}`);
});
Exemple 2.2
suivre le nombre de fois qu'un utilisateur a visité le site
serveur.js
// serveur.js
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();

// Utilise le middleware cookie-parser pour faciliter la manipulation des cookies
app.use(cookieParser());

// Route pour afficher la page d'accueil avec le compteur de visites
app.get('/', (req, res) => {
  // Récupère le compteur de visites depuis le cookie ou initialise à 1 si le cookie n'existe pas
  const visitCount = req.cookies.visitCount ? parseInt(req.cookies.visitCount) + 1 : 1;

  // Stocke le nouveau compteur de visites dans le cookie avec une durée de vie d'une heure
  res.cookie('visitCount', visitCount, { maxAge: 3600000, httpOnly: true });

  res.send(`Bienvenue sur la page d'accueil ! Vous avez visité cette page ${visitCount} fois.`);
});

// Démarrage du serveur sur le port 3000
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Serveur Express en cours d'exécution sur le port ${PORT}`);
});
Exemple3
cet Exemple utilise les cookies pour implémenter un système basique d'authentification.
authMiddleware.js

// authMiddleware.js
const authMiddleware = (req, res, next) => {
  const authToken = req.cookies.authToken;

  // Vérifie si le jeton d'authentification est présent dans le cookie
  if (!authToken) {
    return res.status(401).send('Accès non autorisé. Veuillez vous connecter.');
  }

  // Ici, vous devriez implémenter une vérification réelle du jeton (décodez, validez, etc.)
  // Dans cet exemple, on suppose simplement que le jeton est valide

  // Si le jeton est valide, passe à la route suivante
  next();
};

module.exports = authMiddleware;
Serveur.js

const express = require('express');
const cookieParser = require('cookie-parser');
const authMiddleware = require('./authMiddleware');
const app = express();

// Utilise le middleware cookie-parser pour faciliter la manipulation des cookies
app.use(cookieParser());

// Route de connexion
app.get('/login', (req, res) => {
  // Définit un cookie d'authentification avec une valeur fictive
  res.cookie('authToken', '123456', { maxAge: 900000, httpOnly: true });
  res.send('Vous êtes connecté !');
});

// Route protégée nécessitant une authentification
app.get('/dashboard', authMiddleware, (req, res) => {
  res.send('Bienvenue sur le tableau de bord !');
});

// Route de déconnexion
app.get('/logout', (req, res) => {
  // Efface le cookie d'authentification
  res.clearCookie('authToken');
  res.send('Vous êtes déconnecté.');
});

// Démarrage du serveur sur le port 3000
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Serveur Express en cours d'exécution sur le port ${PORT}`);
});
Exemple4
Utiliser les cookies pour stocker des préférences utilisateur.
preferencesMiddleware.js

 // preferencesMiddleware.js
const preferencesMiddleware = (req, res, next) => {
  // Récupère les préférences utilisateur depuis le cookie ou utilise des valeurs par défaut
  const preferences = req.cookies.preferences || { theme: 'light', language: 'en' };

  // Ajoute les préférences à l'objet de la requête pour les rendre disponibles aux routes suivantes
  req.preferences = preferences;

  // Passe à la route suivante
  next();
};

module.exports = preferencesMiddleware;
 
Serveur.js

const express = require('express');
const cookieParser = require('cookie-parser');
const preferencesMiddleware = require('./preferencesMiddleware');
const app = express();

// Utilise le middleware cookie-parser pour faciliter la manipulation des cookies
app.use(cookieParser());

// Utilise le middleware de gestion des préférences pour toutes les routes
app.use(preferencesMiddleware);

// Route pour afficher les préférences de l'utilisateur
app.get('/preferences', (req, res) => {
  const { theme, language } = req.preferences;
  res.send(`Préférences utilisateur : Theme - ${theme}, Langue - ${language}`);
});

// Route pour modifier les préférences de l'utilisateur
app.post('/update-preferences', (req, res) => {
  // Récupère les nouvelles préférences depuis le corps de la requête (simulé)
  const { theme, language } = req.body;

  // Met à jour les préférences dans le cookie
  res.cookie('preferences', { theme, language }, { maxAge: 900000, httpOnly: true });
  res.send('Préférences utilisateur mises à jour avec succès !');
});

// Démarrage du serveur sur le port 3000
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Serveur Express en cours d'exécution sur le port ${PORT}`);
});
Exemple 4
Créez un fichier cartMiddleware.js pour le middleware de gestion du panier d'achat
cartMiddleware.js

// cartMiddleware.js
const cartMiddleware = (req, res, next) => {
  // Récupère le panier d'achat depuis le cookie ou initialise un panier vide
  const cart = req.cookies.cart || [];

  // Ajoute le panier d'achat à l'objet de la requête pour le rendre disponible aux routes suivantes
  req.cart = cart;

  // Passe à la route suivante
  next();
};

module.exports = cartMiddleware;
serveur.js
// serveur.js
const express = require('express');
const cookieParser = require('cookie-parser');
const cartMiddleware = require('./cartMiddleware');
const app = express();

// Utilise le middleware cookie-parser pour faciliter la manipulation des cookies
app.use(cookieParser());

// Utilise le middleware de gestion du panier d'achat pour toutes les routes
app.use(cartMiddleware);

// Route pour afficher le contenu du panier d'achat
app.get('/cart', (req, res) => {
  const cart = req.cart;
  res.send(`Contenu du panier d'achat : ${JSON.stringify(cart)}`);
});

// Route pour ajouter un article au panier d'achat
app.post('/add-to-cart/:item', (req, res) => {
  const item = req.params.item;

  // Ajoute l'article au panier d'achat
  req.cart.push(item);

  // Met à jour le cookie du panier d'achat
  res.cookie('cart', req.cart, { maxAge: 900000, httpOnly: true });
  
  res.send(`Article ajouté au panier : ${item}`);
});

// Démarrage du serveur sur le port 3000
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Serveur Express en cours d'exécution sur le port ${PORT}`);
});








Cours et TPs