Cours Node.js Cours Node.js - Séance 2 - Serveur API avec données MongoDB

Objectifs de cette séance

Durée estimée cours + exercices: 6 heures.

Pré-requis

Pour effectuer ces exercices, assurez-vous que les pré-requis suivants sont bien installés et accessibles depuis votre terminal Bash (ou compatible):

Installation de Docker

Nous allons utiliser Docker pour exécuter le serveur de base de données MongoDB sans interférer avec votre système d’exploitation.

Les instructions de cette section ne seront à suivre que si les deux commandes suivantes ne fonctionnent pas comme prévu:

Sous Linux et macOS il suffit d’installer Docker Desktop (Community Edition) depuis docker.com/products/docker-desktop.

Sous Windows, la démarche peut être plus ou moins compliquée (source). En effet, la version Windows de Docker repose sur une technologie appelée Hyper-V, et celle-ci n’est supportée que par l’édition Pro de Windows 10, sur architectures 64 bits. Si c’est votre cas, suivez ces instructions pour activer Hyper-V, puis installez Docker Desktop.

Si vous utilisez pas l’édition Pro de Windows 10, ou que votre matériel n’est pas compatible avec Hyper-V, je vous recommande d’installer Ubuntu dans une machine virtuelle à l’aide de VirtualBox (ex: en suivant les instructions vidéo depuis Docker Tutorial for Beginners - Hashnode) ou d’essayer Docker Toolbox.

Ceci étant dit, si toutes vos tentatives d’installation de Docker échouent, vous pouvez télécharger et installer le service MongoDB manuellement sur votre machine depuis MongoDB Download Center.

Nous verrons dans l’exercice ci-dessous comment installer et exécuter un serveur MongoDB à l’aide de Docker.

Exercice 2.1 - Lecture et écriture dans MongoDB

Le but est de 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”)

Pour cela, nous allons:

Critères de validation

Étapes proposées

  1. Installer et lancer un serveur de base de données MongoDB écoutant sur le port 27017:
  1. Dans une nouvelle session de terminal, tester que le serveur est accessible: $ docker run -it --link nodejs-ex-2-1:mongo --rm mongo:4 mongo --host mongo test pour démarrer le client “mongo Shell”, puis vérifier que la commande show dbs affiche bien une liste de bases de données, puis pressez Ctrl-C pour quitter le client.

  2. Installer le package mongodb avec npm, et vérifier qu’il a bien été ajouté au fichier package.json de votre projet.

  3. Créer un programme dates.js qui se sert du package mongodb pour se connecter à la base de données mongodb://localhost:27017/test. (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.

  1. Après avoir vérifié que $ node dates.js s’exécute sans erreur, modifier dates.js pour qu’il affiche la liste des documents de la collection dates dans la sortie standard. (cf Read methods)

Note: Sachant que nous n’avons pas encore ajouté de documents dans cette collection, la liste de documents doit être un tableau vide.

  1. Modifier dates.js à nouveau pour ajouter un document { date: new Date() } dans la collection dates, avant l’affichage des documents. (cf Inserting documents)

  2. Créer une nouvelle “release” dans votre dépôt: $ git tag v2.1.

  3. Sauvegarder votre projet dans un dépôt distant. (vous pouvez utilisez le même que celui de la séance précédente)

Une fois que vous aurez terminé cet exercice, merci d’aider vos camarades qui auraient des difficultés.

Exercice 2.2 - Stockage de l’historique dans MongoDB

Le but est de compléter le code source du “Chat-bot avec mémoire” (cf exercice 1.3) afin de pouvoir consulter et modifier l’historique des messages et de leurs réponses.

Exemples de conversation / cas d’usage (même que celui de l’exercice 1.3):

  1. $ curl -X POST --header "Content-Type: application/json" --data "{\"msg\":\"demain\"}" http://localhost:3000/chat répondra “Demain: Mercredi” (y compris après redémarrage du serveur)
  2. $ curl -X GET http://localhost:3000/messages/all affichera l’historique des conversations, tel que décrit ci-dessous (y compris après redémarrage du serveur)
  3. $ curl -X DELETE http://localhost:3000/messages/last supprimera le dernier échange de l’historique (message de l’utilisateur + réponse du chat-bot)

Pour cela, nous allons:

Description de l’affichage de l’historique des conversations

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',
  }
]

Critères de validation

Cet exercice s’appuie à la fois sur le code écrit lors de la séance précédente, et sur le code écrit dans l’exercice 2.1 (ci-dessus).

Libre à vous d’enregistrer vos modifications dans un nouveau dépôt distant, ou de compléter le dépôt de la séance précédente (à condition que vous ayez bien créé un tag pour garder une trace de la version précédente de votre serveur).

Étapes proposées

  1. Modifier server.js pour qu’il se connecte à la base de données mongodb://localhost:27017/chat-bot.
  2. Implémenter et tester le point d’accès GET /messages/all. (il devrait retourner un tableau vide)
  3. Faire en sorte que ce point d’accès retourne l’historique des conversations => Enregistrer les messages de l’utilisateur et les réponses du chat-bot dans la collection messages.
  4. Implémenter le point d’accès DELETE /messages/last, et vérifier à l’aide d’une requête à GET /messages/all qu’il fonctionne bien comme prévu.
  5. Créer une nouvelle “release” pour garder une trace de cette version du serveur dans votre dépôt: $ git tag v2.2.

Exercice 2.3 - API et base de données en production

Le but de cet exercice est de mettre le serveur API développé ci-dessus ainsi que sa base de données en production, afin qu’elle soit accessible en permanence et à quiconque sur internet.

Critères de validation

ℹ️ Rendu: Il faudra fournir l’URL du dépôt dans lequel votre code est disponible, ainsi que l’URL à laquelle l’API est accessible sur internet.

Libre à vous d’enregistrer vos modifications dans un nouveau dépôt distant, ou de compléter le dépôt de la séance précédente (à condition que vous ayez bien créé un tag pour garder une trace de la version précédente de votre serveur).

Étapes proposées

  1. Créer un serveur MongoDB depuis mlab.com (gratuit), puis enregistrer l’URL de ce serveur dans une variable d’environnement de votre application sur Heroku: MONGODB_URI.
  2. Modifier server.js pour qu’il sache se connecter à cette base de données, à partir des variables d’environnement définies dans Heroku. (et qu’il puisse aussi fonctionner en local)
  3. Documenter les points d’accès de votre API dans README.md, afin que d’autres utilisateurs comprennent rapidement comment l’utiliser, que ce soit en production ou localement.
  4. Créer une nouvelle “release” pour garder une trace de cette version du serveur dans votre dépôt: $ git tag v2.3.

Bonus

Important : assurez-vous d’avoir bien créé un tag et que celui-ci soit visible depuis votre dépôt distant avant d’effectuer les exercices bonus.

Pour aller plus loin

Ressources sur la création d’APIs:

Ressources sur la conception et exploitation de base de données MongoDB en production: