Master Miage NTDP 2016-2017: NodeJS et MongoDB

De $1

Introduction 

1 - présentation de NodeJS et premiers exercices simples

2 - routage avec le module ExpressJS, Web Services RESTFUL

3 - MongoDB

Vous allez, dans cette séance apprendre les bases de l'utilisation de MongoDB depuis une application écrite en JavaScript et exécutée avec NodeJS. Dans un second temps, vous ré-utiliserez le code qui fait le CRUD sur une base d'exemples de MongoDB, en le déplaçant dans des méthodes app.get, app.post etc du TP de la séance 3, pour faire une application utilisable depuis des URLs.

  • Ressource externe pour aller plus loin: un super MOOC (en anglais) sur MongoDB/Node/Angular/Ionic, gratuit, par un des auteurs de MongoDB. Inscrivez-vous ici! 

Etape 1 - Installer MongoDB sur votre machine

Suivez les installations propres à votre système d'exploitation situées sur cette page du site officiel. Ne choisissez pas l'installation manuelle.

Sur mon Mac j'ai fait:

  • brew update
  • brew install mongodb
  • mkdir -p /data/db
  • chmod 777 /data/db (pour autoriser un user lambda à écrire dedans)
  • mongod (pour exécuter MongoDB)

Etape 2 - Créer et peupler une collection par défaut (avec un dataset issu du tutorial MongoDB officiel)

  • Suivre les instructions situées sur cette page. Vous allez devoir récupérer le fichier primer-dataset.json (assez gros, attention, ne pas faire copier/coller), et exécuter la commande suivante, qui créer une bd "test" et ajoute dedans la collection "restaurants" :
    • mongoimport --db test --collection restaurants --drop --file primer-dataset.json
  • Une fois l'importation faite, garder l'onglet ouvert sur cette page, car on va continuer le tutorial à l'étape 5.

Etape 3 - Installer un outil d'administration sympa

Je vous recommande fortement MongoChef, un produit commercial mais gratuit pour utilisation non commerciale. Le télécharger sur: http://3t.io/mongochef/

Etape 4 - Ouvrir MongoChef et voir la collection que l'on vient d'importer

  • S'assurer que MongoDB tourne (mongod doit être lancé, ou bien vous devez avoir installé MongoDB en service)
  • Lancer l'application 3T Mongo Chef, connectez-vous sur MongoDB. Les valeurs par défaut doivent être Ok, normalement.
  • Ouvrir la collection "restaurants" dans la base "test"

Quelques screenshots:

MongoChef1.jpg

MongoChefRequestBuilder.jpg 

Etape 5 - Installer le driver MongoDB pour NodeJS

  • Créez un répertoire tpmongo
  • cd tpmongo
  • npm install mongodb

Ca doit télécharger le module driver mongodb dans un sous-répertoire node_modules.

Etape 6 - Tester des bouts de code JavaScript qui font le CRUD dans cette base

Suivre la suite du tutorial MongoDB, en commençant par la page montrant comment se connecter à la base restaurant. Vous devez copier/coller le code dans un fichier connect.js puis l'exécuter avec node connect.js. Si vous suivez bien les instructions de la page vous devriez obtenir:

connect.js:

var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://localhost:27017/test';


MongoClient.connect(url, function(err, db) {
  assert.equal(null, err);
  console.log("Connected correctly to server", url);
  db.close();
});

Vous le testerez en exécutant node connect.js et ça devrait afficher sur la console "Connected correctly to server".

Vous passerez ensuite à la page de tutorial suivante, et ainsi de suite...

Chaque page va vous proposer des bouts de code JavaScript pour chercher, modifier, supprimer et insérer des données dans la base des restaurants. Je vous conseille à chaque fois de faire un fichier différent et le tester ensuite avec la commande node:

  • node connect.js
  • node insert_document.js
  • node find_all.js
  • node find_some.js
  • node update.js
  • node delete.js
  • node aggregation.js
  • node indexes.js

Correction de cette partie:

Etape 7 - Intégrer le code dans une application Node/Express qui fait du routage

Vous devrez insérer le code qui fait le CRUD dans MongoDB dans les fonctions de routage vues lors du cours sur Express. Vous renverrez les résultats en JSON. Pour les POSTs vous devrez produire un formulaire et vous pourrez tester dans un premier temps les updates et delete via GET, en tapant l'URL dans votre navigateur. Pour les PUT et DELETE, vous installerez une extension à votre navigateur pour tester les requêtes AVANT de programmer des requêtes AJAX en JavaScript (ex: application "postman" ou "REST client" pour Google Chrome).

Allez-y incrémentalement, petit à petit.

  1. Mettez un bouton "connexion à MongoDB" dans la page d'accueil. On clique dessus et ça doit renvoyer "connexion effectuée".
     
  2. Ajoutez un bouton "voir 10 données" qui doit afficher les 10 premiers restaurants, pour voir si cela fonctionne. Pour cela : copier/coller le code de l'exemple find_all.js précédent dans un fichier server.js, dans lequel on aura préalablement déjà copié / collé le code pour faire un serveur Web basique avec le module Express.

    Ici une correction possible du code du serveur : findServer.js
     
  3. Maintenant on essaie d'envoyer une requête en Ajax et on essaie de retourner les résultats en JSON. On les affichera avec console.log dans un premier temps. Requête Ajax en XhR2. Les curieux pourront regarder la "fetch API" récente qui va remplacer XhR2 à terme. Exemple de correction de la page client qui affiche les restaurants après une requête Xhr2 GET: le fichier restaurants.html qui est dans ce zip : Restaurants.zip Regardez comment on fait la conversation 
     
  4. Maintenant on essaie de les afficher dans un tableau HTML construit dynamiquement en utilisant l'API du DOM. Voir un exemple dans le fichier restaurants2.html du zip précédent.
     
  5. Maintenant on essaie de rajouter dans le tableau un bouton "supprimer" et quand on clique dessus ça appelle l'URL pour supprimer une donnée. On re-affichera les données pour vérifier que le restaurant a disparu.
     
  6. On fera un formulaire pour ajouter un restaurant, un autre pour modifier un restaurant..

A RENDRE POUR LUNDI PROCHAIN :

  • Ce TP avec les options suivantes (au choix), faites ce que vous pouvez :
    • Un peu de CSS pour rendre le tableau joli
       
    • Des boutons next/previous pour afficher les résultats paginés, attention, chaque bouton renvoie une requête AJAX pour charger les restaurants 0-10, 11-20, 21-30 etc.... Du coup on doit pouvoir se promener dans l'ensemble de la collection.
       
    • Ajouter un champ de recherche sur le nom des restaurants, ou sur d'autres critères
       
    • Utiliser AngularJS pour faire le templating et remplir les trous. Ici un petit exemple : http://jsbin.com/vufaja/1/edit?html,js,output et si vous voulez en savoir plus  sur Angular 1, je recommande ce MOOC : https://www.coursera.org/learn/singl...with-angularjs

Resources externes

MOOCS SUR MONGODB

MOOC pour bien débuter, donné par les auteurs de MongoDB

Super MOOC sur Mongo DB + Mongoose + Node + Express + Angular + Ionic (applications hybrides mobiles)

Pas pour débutants en JavaScript !

Fait par un des auteurs de MongoDB. C'est gratuit, c'est sur EDx: https://www.edx.org/course/introduct...mongodbx-m101x

Créer un server Web (routage, Web Services, etc.)

Bases de données relationnelles