L’objectif du TP est de produire un backend en node et Express pour un site de produits marchands. Les contraintes à respecter sont :
Le serveur écoute le port 3500.
Toutes les requêtes du frontend (postman) sont transmises par post au backend;
Toutes les données transmises par le frontend sont encodées en www-form-urlencoded (ce sera plus simple pour utiliser postman).
Toutes les réponses du backend sont au format JSON. Comme dans les séances précédentes, les réponses « normales » du serveur sont au format :
{ status: 'ok', data: les_données_à_transmettre }
et les réponses indiquant une erreur sont au format :
{ status: 'error', data: {reason: la_raison_de_l_erreur } }
La sécurité est assurée par JSON web token.
Règle
Pour soumettre votre TP, vous devez créer une archive ZIP ou TGZ (une archive tar gz) contenant le backend. Comme pour les séances notées précédentes, déplacez le répertoire node_modules en dehors de votre backend avant de l’archiver.
Téléchargez les tables de la base de données disponibles à l’URL suivante :
Importez ces tables dans votre base de données.
Ce sont les fabricants des produits qui se connectent au backend avec leur login et leur password (cf. la table FISA_fabricants). Ceux-ci fabriquent des produits, qui sont répertoriés dans la table FISA_produits, la relation entre fabricants et produits étant indiquée dans la table FISA_prodFab (un fabricant fabrique un produit). Enfin, les clients du site sont répertoriés dans la table FISA_clients et les achats qu’ils ont effectués sont reportés dans la table FISE_achats.
Écrivez un serveur Express respectant les conditions mentionnées dans la section « objectifs du TP » et ayant une route /checkLogin permettant d’authentifier ou non les fabricants.
Rajoutez une route /getProduits qui permet aux fabricants de récupérer la liste de leurs produits (nom, id et prix). Évidemment, si le fabricant n’est pas connecté, le backend retourne un message d’erreur. Voici un exemple de ce que retournerait le backend pour le fabricant fabLab, qui est déjà connecté :
{
"status": "ok",
"data": [
{
"idProd": 230054,
"nomProd": "cable USB C 100W 480Mbps",
"prixProd": 7.99
},
{
"idProd": 654321,
"nomProd": "Ruban LED 5m 25W",
"prixProd": 21.99
}
]
}
Rajoutez une route /getAchats/:idProd permettant à un fabricant de récupérer la liste des achats du produit dont l’id est idProd. Évidemment, si le fabricant n’est pas connecté ou bien s’il ne fabrique pas ce produit, le backend retourne un message d’erreur. Dans le cas contraire, le backend retourne la liste des produits en précisant le nom du client, le nombre de produits achetés et la date d’achat. Par exemple, pour le produit « Ruban LED 5m 25W » d’id 654321, fabLab obtiendrait l’objet Javascript suivant :
{
"status": "ok",
"data": [
{
"nomClient": "Entreprise B",
"nbAchats": 5,
"dateAchats": "2024-10-14T22:00:00.000Z"
},
{
"nomClient": "Entreprise C",
"nbAchats": 42,
"dateAchats": "2025-01-24T23:00:00.000Z"
}
]
}
Dans votre backend PHP, il suffisait que vous rajoutiez un fichier .php dans le répertoire du backend pour qu’il soit disponible sur le serveur Apache. On souhaite ici obtenir un résultat similaire, c’est-à-dire ne pas avoir à rajouter explicitement dans le fichier .js du serveur des require et des app.post(...) pour chaque route mais plutôt qu’au démarrage, le serveur déduise lui-même des fichiers présents les require et les app.post(...) à effectuer. Modifiez votre serveur en conséquence.