Durée estimée: 3-6 heures.
Pour effectuer ces exercices, assurez-vous que les pré-requis suivants sont bien installés et accessibles depuis votre shell Linux:
node
; (tester avec $ node --version
)curl
; (tester avec $ curl --version
)Il existe (au moins) trois manières de procéder:
Il suffit de créer un compte sur MongoDB Atlas puis de suivre les étapes proposées pour créer (puis tester) une base de données basée sur la plateforme “Azure”.
À vérifier en cas de difficultés: il est possible que cette connexion soit rendue impossible par votre pare-feu ou par le réseau de votre école.
Si Docker fonctionne bien sur votre machine, lancer le serveur MongoDB via une image Docker, en suivant ces étapes:
$ docker run --rm --publish 27017:27017 --name mongodb-pour-nodejs mongo:4
$ docker run --rm -it --link mongodb-pour-nodejs:mongo mongo:4 mongo --host mongo test
Sinon: installer, configurer et lancer un serveur MongoDB sur votre machine, en suivant ces étapes:
Installer MongoDB Server, community edition sur votre machine, et de manière à ce qu’il soit accessible depuis votre shell Linux.
Après avoir redémarré votre shell Linux, si la commande mongod
est introuvable, ajoutez le répertoire créé dans la variable PATH
de votre système d’exploitation, en suivant les instructions de Install MongoDB.
Comme indiqué dans les instructions de Run MongoDB, créez un répertoire /data/db
et assurez-vous qu’il sera accessible à mongod
en donnant les permissions nécessaires: $ sudo chmod 777 /data/db
.
Ensuite, vous devriez être en mesure de lancer le serveur mongod
, et de vous y connecter à l’aide du client mongo
, depuis une autre session de shell Linux. (cf étapes ci-dessous)
Dans une session de shell Linux, utiliser le client “mongo
Shell” pour vérifier que la base de données est bien accessible. Il suffit de taper mongo
suivi de l’URL du serveur.
Une fois connecté au serveur via l’invite de commandes du client mongo
, la commande show dbs
devrait afficher une liste de bases de données.
Pressez Ctrl-C pour quitter le client et retourner à l’invite de commandes du shell Linux.
Dans cet exercice, nous allons découvrir comment manipuler une base de données MongoDB depuis un programme Node.js, à l’aide du package mongodb
. (anciennement connu sous le nom de “MongoDB Native Driver for Node.js”)
Nous allons écrire un programme Node.js qui va:
dates
”;{ date: new Date() }
dans cette collection.Utiliser await
pour tous les appels asynchrones à la base de données.
Le code source devrait tenir sur une quarantaine de lignes.
Initialiser un serveur de base de données MongoDB. (cf Comment disposer d’un serveur MongoDB ?, plus haut)
Vérifier que vous parvenez bien à vous connecter à ce serveur depuis votre shell Linux. (cf Comment tester la connection à un serveur MongoDB ?, plus haut)
Initialiser un projet Node.js dans un répertoire vide, installer le package mongodb
avec npm, et vérifier qu’il a bien été ajouté au fichier package.json
du projet.
Créer et faire fonctionner un programme dates.js
qui se sert du package mongodb
pour se connecter à la base de données créée à l’étape 1. (cf Connecting)
Note: Vous pouvez ignorer le message disant que la méthode de connexion est dépréciée. Par contre, votre programme devrait pouvoir s’exécuter sans erreur.
Modifier dates.js
pour qu’il affiche la liste des documents de la collection dates
dans la sortie standard. Initialement, cette liste sera un tableau vide.
Documentation: Read methods
Ajouter dans dates.js
les instructions nécéssaires pour ajouter un document { date: new Date() }
dans la collection dates
, avant l’affichage des documents de cette même collection.
Documentation: Inserting documents
Une fois que vous aurez terminé cet exercice, merci d’aider vos camarades qui auraient des difficultés.
Dans cet exercice, nous allons compléter le serveur “chat-bot” que nous avons développé jusqu’à l’exercice 5 de la partie 1 du cours, de manière à:
POST /chat
et de leurs réponses, dans une collection MongoDB;GET /messages/all
et DELETE /messages/last
.Utiliser await
pour tous les appels asynchrones.
Le code source devrait tenir sur une centaine de lignes.
Fournir un fichier README.md
décrivant les 3 commandes (max.) nécessaires pour télécharger et faire fonctionner ce serveur depuis une autre machine.
$ curl -X POST --header "Content-Type: application/json" --data "{\"msg\":\"ville\"}" "http://localhost:3000/chat"
répondra “Nous sommes à Paris” (comme précedemment)$ curl -X GET "http://localhost:3000/messages/all"
affichera l’historique des conversations (messages de l’utilisateur et réponses du chat-bot), tel que décrit ci-dessous, y compris après redémarrage du serveur$ curl -X DELETE "http://localhost:3000/messages/last"
supprimera le dernier échange de l’historique (message de l’utilisateur + réponse du chat-bot)GET /messages/all
Notre serveur doit retourner l’historique sous forme d’un tableau JavaScript contenant tous les messages echangés, dans l’ordre chronologique.
En guise d’exemple, voici ce que devrait retourner le serveur si on requête GET /messages/all
après avoir suivi le cas d’usage ci-dessus:
[
{
"from": "user",
"msg": "demain"
},
{
"from": "bot",
"msg": "Demain: Mercredi"
}
]
messages
Chaque message reçu ou répondu par le chat-bot doit être représenté par un document défini par les trois propriétés suivantes:
_id
(type: ObjectId
): un identifiant unique, généré automatiquement par MongoDB pour chaque message;from
(type: string
): l’émetteur du message, bot
ou user
;msg
(type: string
): le contenu du message. (ex: demain = Mercredi
)server.js
pour qu’il se connecte à la base de données.GET /messages/all
. (il devrait retourner un tableau vide)messages
.DELETE /messages/last
, et vérifier à l’aide d’une requête à GET /messages/all
qu’il fonctionne bien comme prévu.README.md
.Le but de cet exercice est de mettre le serveur développé ci-dessus en production, afin qu’il soit accessible en permanence et à quiconque sur internet.
MONGODB_URI
.server.js
pour qu’il parvienne à se connecter à cette base de données, que celui-ci s’exécute en production ou en local, grâce à cette variable d’environnement.README.md
, afin que d’autres utilisateurs comprennent rapidement comment l’utiliser, que ce soit en production ou localement.mongodb
. => Expliquez l’impact de ce changement: avantages et inconvénients, en supposant que votre application soit destinée à se développer.