Université Hassan 1er
École Nationale des Sciences Appliquées Berrechid
Master Universitaire Ingénierie Informatique et BigData
TP 1
Application TODO avec [Link] ([Link] + ES6+)
Pr : F. TOUFIK
Année universitaire : 2025–2026
1
Université Hassan 1er – ENSAB MUP IIBD
2. Sujet du TP : Application TODO avec [Link]
Vous allez développer une petite application de gestion de tâches exposée via une API
REST construite avec [Link]. L’utilisateur (client) pourra ajouter, afficher et terminer
des tâches en appelant des routes HTTP (par exemple avec curl, Postman ou un client
HTTP).
Chaque tâche sera un objet contenant :
— un identifiant unique (id)
— une description (label)
— un statut d’avancement (done)
Les tâches seront persistées dans un fichier texte (par exemple [Link]), avec une
tâche par ligne. Chaque ligne pourra suivre un format simple, par exemple :
— Format texte séparé par des points-virgules : id;label;done
— ou une structure JSON par ligne : {"id":1,"label":"Faire les courses","done":false}
3. Organisation du TP
Le TP est structuré en plusieurs parties progressives.
Partie 1 — Initialisation du projet
— Créez un dossier tp-todo-express.
— Initialisez un projet Node avec npm init -y.
— Ajoutez "type": "module" dans le fichier [Link] pour activer les modules
ES.
— Installez [Link] : npm install express.
— (Optionnel) Installez nodemon pour le rechargement automatique : npm install
–save-dev nodemon.
Partie 2 — Module de gestion des tâches
Créez un fichier [Link] contenant la logique métier :
— un tableau de tâches stockées en mémoire (chargées depuis le fichier texte au dé-
marrage),
— une fonction fléchée pour ajouter une tâche,
— une fonction pour afficher toutes les tâches,
— une fonction pour marquer une tâche comme terminée,
— (optionnel) une fonction pour supprimer une tâche.
Contraintes techniques :
— utiliser les template strings pour l’affichage dans la console (journalisation) ou
les messages,
2
Université Hassan 1er – ENSAB MUP IIBD
— utiliser le spread operator pour ajouter des tâches : création d’un nouveau ta-
bleau à partir de l’ancien,
— utiliser le destructuring lors de la manipulation et de l’affichage des tâches.
Partie 3 — API REST avec [Link]
Créez un fichier [Link] qui démarre un serveur HTTP Express :
— Importer et configurer Express : import express from ’express’;
— Créer une instance d’application : const app = express();
— Ajouter le middleware [Link]([Link]()); pour parser le JSON.
Définissez les routes suivantes (au minimum) :
— GET /tasks : retourne la liste complète des tâches.
— POST /tasks : ajoute une nouvelle tâche. Le corps de la requête contiendra par
exemple : { "label": "Acheter du pain" }.
— PATCH /tasks/ :id/done : marque la tâche d’identifiant id comme terminée.
— GET /tasks/ :id (optionnel) : retourne une tâche par son identifiant.
Contraintes :
— utiliser les fonctionnalités ES6 : rest operator, destructuring, template strings pour
construire les réponses,
— retourner des réponses JSON structurées : { success: true, data: ... },
— gérer les cas d’erreur (tâche introuvable, corps de requête invalide, etc.) avec un
code HTTP adapté (404, 400, ...).
Partie 4 — Sauvegarde des tâches dans un fichier texte
Créez un fichier [Link] pour gérer la persistance dans un fichier texte (par
exemple [Link]) :
— chargement des tâches depuis le fichier au lancement de l’application :
— lire le fichier avec [Link],
— découper le contenu par lignes,
— convertir chaque ligne en objet tâche (id, label, done).
— sauvegarde des tâches après chaque modification :
— réécrire l’ensemble des tâches dans le fichier (une tâche par ligne),
— ou utiliser [Link] pour ajouter les nouvelles lignes, selon la
stratégie choisie.
Contraintes :
— utiliser async/await pour toutes les opérations asynchrones sur les fichiers,
— gérer l’erreur ENOENT lorsque le fichier n’existe pas encore :
— s’il n’existe pas, considérer qu’il n’y a pas encore de tâches,
— le créer lors de la première sauvegarde.
3
Université Hassan 1er – ENSAB MUP IIBD
— garantir que le format reste cohérent : une tâche par ligne, toujours dans le
même format.
5. Améliorations possibles
Pour aller plus loin :
— ajouter une route DELETE /tasks/:id pour supprimer une tâche,
— ajouter une route DELETE /tasks pour supprimer toutes les tâches,
— ajouter une route de recherche GET /tasks/search?query=<mot> pour filtrer les
tâches par mot-clé dans le label,
— ajouter un champ createdAt (date de création) pour chaque tâche, stocké égale-
ment dans le fichier texte,
— ajouter une petite interface HTML (frontend minimal) qui consomme l’API Ex-
press (optionnel),
— colorer les logs serveur dans la console avec le module chalk.
6. Livrables
— Le dossier complet du projet [Link].
— Les fichiers : [Link], [Link], [Link].
— Un fichier [Link] expliquant :
— comment installer les dépendances,
— comment lancer le serveur Express,
— comment tester les différentes routes (exemples de commandes curl).