Dans un premier temps, nous allons stocker les données dans des fichiers JSON pour simuler une base de données. Nous remplaçerons ces fichiers par une base de données MongoDB par la suite.
Fichiers JSON
Créez un dossier data
à la racine du projet, et ajoutez-y les fichiers suivants :
scores.json
qui contient un tableau de scores
1[2 { "id": 1, "joueur": "Aude", "score": 100 },3 { "id": 2, "joueur": "Bob", "score": 200 }4]
joueurs.json
qui contient un tableau de joueurs
1[2 { "id": 1, "name": "Aude", "username": "admin", "password": "admin", "meilleurScore": 1000 },3 { "id": 2, "name": "Bob", "username": "bob", "password": "bob", "meilleurScore": 100 },4 { "id": 3, "name": "Charlie", "username": "charlie", "password": "charlie", "meilleurScore": 500 },5 { "id": 4, "name": "David", "username": "david", "password": "david", "meilleurScore": 300 },6 { "id": 5, "name": "Eve", "username": "eve", "password": "eve", "meilleurScore": 200 }7]
Modification de l’application serveur
On souhaite maintenant afficher le tableau des scores dans le client.
Pour cela :
- Créez un fichier
scores.js
dans le dossierroutes
. - Ajoutez une route de type
get
pour l’url/scores
qui renvoie le fichierscores.json
au formatJSON
. - Déployez l’application sur Vercel et testez la route
/scores
avec Postman ou un navigateur.
Modification de l’application client
On souhaite modifier le client pour qu’il récupère les scores et les affiche sous forme de tableau HTML.
index.html
- Ajoutez une div qui sera utilisé comme popup pour afficher les scores :
1<div id="popup-overlay">2 <div id="popup-container">3 <div id="popup"></div>4 <div id="popup-close">X</div>5 </div>6</div>
- Ainsi qu’un bouton pour afficher les scores :
1<button id="scores">Scores</button>
styles.css
Ajoutez du CSS pour styliser la popup :
1#popup-overlay {2 position: relative;3 position: fixed;4 top: 0;5 left: 0;6 right: 0;7 cursor: pointer;8 display: flex;9 align-items: center;10 justify-content: center;11 gap: 10px;12 width: 100vw;13 height: 100vh;14 display: none;15}16
17#popup-container {18 position: relative;19 display: flex;20 align-items: center;21 justify-content: center;22 gap: 10px;23}24
25#popup {26 background: rgba(0, 123, 255, 0.8);27 color: white;28 padding: 10px 20px;29 border-radius: 5px;30 cursor: pointer;31 height: 80vh;32 width: 600px;33}34
35#popup-close {36 position: absolute;37 top: 10px;38 right: 10px;39 cursor: pointer;40 color: white;41}
main.mjs
- Effectuez des modifications pour afficher/masquer la popup sur le clic du bouton
Scores
. - Lorsque la popup est affichée, récupérez les scores avec
fetch
et affichez-les dans la popup. Voici un exemple de code :
1// Fetch API to get the /scores route2fetch("/scores")3 .then((response) => response.json())4 .then((data) => {5 popup.innerHTML = "<h2>Scores</h2>";6 let ul = document.createElement("ul");7 data.forEach((score) => {8 const li = document.createElement("li");9 li.textContent = `${score.joueur}: ${score.score}`;10 ul.appendChild(li);11 });12 popup.appendChild(ul);13 })14 .catch((error) => console.error(error));
Modifiez le client pour qu’il récupère les scores avec l’API Fetch et les affiche sous forme de tableau HTML avec les noms des joueurs et leurs scores.
Voici un exemple du résultat attendu : https://express-007.vercel.app/
Conclusion
Pour le moment, nous stockons les données dans des fichiers JSON pour simuler une base de données.
Mais il faut noter que la partie client de notre application utilise maintenant l’API Fetch pour récupérer les scores depuis une API REST, la partie serveur de notre application !
Dans la prochaine partie, nous allons mettre en place une authentification simple pour identifier les joueurs et récupérer leur meilleur score.