Easy-Micro

ESPACEMEMBRE Not Only SQL
Mongo NodeJS

Gérer les données d'un serveur MongoDB avec NodeJS

Formation NoSQL MongoDB par Easy-Micro Connexion à Node.JS

L'utilisation de Node.js en tant que serveur web permet d'utiliser le JavaScript côté serveur. -> Plus d'infos sur Node.js

Intaller node et npm

Téléchargez plutôt la version LTS (Long Term Support) car la dernière version (ou current en anglais) est mise à jour tous les 6 mois et vous oblige à mettre à jour votre code au fur et à mesure.

Exécutez votre fichier, acceptez la licence, déposez-le dans "Program files" et ce package va vous installer :

  • L'exécuteur node.js : le programme permettant d'exécuter des fichiers .js (comme php.exe le ferait avec des .php).
  • Le module npm (Node Package Manager) : un gestionnaire de modules qui va vous permettre simplement d'ajouter et retirer les librairies dont vous aurez besoin pour vos applications (pas de surplus, seulement le nécessaire donc).
  • Un raccourci vers la documentation en ligne.
  • Des variables d'environnements : Ainsi vous pourrez exécuter les commandes node et npm dans votre invite de commande.

Si l'installation c'est bien passée, la fenêtre de la console Node.js c'est ouverte. Nous ne l'utiliserons pas pour l'instant. Vous pouvez la fermer.

Avant de créer un projet Node, faisons un petit test : Créez un dossier de travail à la racine de votre disque dur (projet_node) et copier/coller cette ligne console.log('Bienvenue dans Node.js !'); dans un fichier bloc-note (test.js)

Dans la console Windows (CMD)
C:\Users\yo> cd C:/projet_node
C:\projet_node> node test.js
L'instruction "node" permet d'exécuter des fichiers js. Cela devrait vous afficher le texte du fichier dans votre console Windows

Une fois connecté à Node.js, on doit créer un fichier de projet package.json et on ajoute le package mongodb à notre projet NodeJS.

Dans la console Windows (CMD) - Création du fichier package.json
C:\projet_node> npm init --y
La commande npm init crée le fichier de projet package.json. L'option --y pour yes, permet de passer outre tout le questionnaire de création du fichier de projet
Dans la console Windows (CMD) - Installation du driver mongodb
C:\projet_node> npm install --S mongodb
L'option --S indique à npm de mettre à jour le package.json

Formation NoSQL MongoDB par Easy-Micro Connexion à MongoDB Atlas

MongoDB Atlas Cluster

La première étape est de récupérer une chaîne de connexion depuis Mongo Atlas pour nous relier à Node.js. Depuis votre interface Mongo Atlas, cliquez sur le bouton gris "Connect" et choisissez la connexion "Connect your application"

Chaîne de de connexion à Mongodb Atlas :
mongodb+srv://<username>:<password>@cluster0.tumbv.mongodb.net/<database>?retryWrites=true&w=majority
username, password et database sont, bien sûr, à renseigner

Formation NoSQL MongoDB par Easy-Micro Script de connexion

Collez ce code dans un fichier javascript (app.js) en l'adaptant à votre configuration

Script de connexion (syntaxe ES5) à enregistrer dans un fichier app.js
const MongoClient = require('mongodb').MongoClient;

// remplacez cette chaîne par votre chaîne de connexion
const uri = "mongodb+srv://<username>:<password>@cluster0.tumbv.mongodb.net/<database>?retryWrites=true&w=majority";

MongoClient.connect(uri, function(err, client) {
   if(err) {
        console.log('Erreur de connexion au serveur MongoDB Atlas...\n',err);
   }
else {
   console.log('Connexion ok...');
   
   // ici on peut saisir des actions sur nos collections

   client.close();
   }
});
Dans la console Windows (CMD) - Exécuter votre script
C:\projet_node> node app.js
Cela devrait vous connecter à votre cluster MongoDB Atlas - Plus d'infos sur Codeforgeek.com

Warning de Node.js

Pour éviter un warning de Node.js de type "Warning: Current Server Discovery and Monitoring engine is deprecated...", on rajoute la variable useUnifiedTopology à le fin de notre chaîne de connexion en la passant à true comme ceci :

const uri = "mongodb+srv://<username>:<password>@cluster0.tumbv.mongodb.net/<database>?retryWrites=true&w=majority&useUnifiedTopology=true"

Autre script de connexion qui affiche une collection

A enregistre sous app2.js


const MongoClient = require('mongodb').MongoClient;
const assert = require('assert'); // méthode qui test si une expression est vrai ou fausse

// remplacez cette chaîne par votre chaîne de connexion
 const uri = "mongodb+srv://<username>:<password>@cluster0.tumbv.mongodb.net/<database>?retryWrites=true&w=majority&useUnifiedTopology=true";

MongoClient.connect(uri, function(err, client) {
   if(err) {
        console.log('Erreur de connexion au serveur MongoDB Atlas...\n',err);
   }
   console.log('Connexion ok...');

const dbName = 'ma_db';
const db = client.db(dbName);

// appel de la fonction anonyme findDocuments
findDocuments(db, function() {
client.close();
});
});

// Fonction asynchrone qui affiche la collection
const findDocuments = function(db, callback) {
  const collection = db.collection('restaurants');
  collection.find({}).toArray(function(err, docs) {
    assert.equal(err, null);
    console.log("Voici les documents :");
    console.log(docs)
    callback(docs);
  });
}

Autre script de connexion en ECMAScript 7

Script ECMAScript 7 avec une fonction asynchrone qui utilise l'opérateur await qui permet d'attendre la résolution d'une promesse (plus d'infos) - A enregistrer dans un nouveau fichier (app3.js)

const { MongoClient } = require('mongodb');

async function main(){
    const uri = "mongodb+srv://<username>:<password>@cluster0.tumbv.mongodb.net/<database>?retryWrites=true&w=majority&useUnifiedTopology=true";
 
    // client est une instance de MongoClient
    const client = new MongoClient(uri);
 
    try {
        // Connexion au cluster MongoDB
        await client.connect();
 
        // Appel d'une fonction qui affiche la liste des bases de données (voir ci-dessous)
        await  listDatabases(client);
 
    } catch (e) {
        console.error(e);
    } finally {
        await client.close();
    }
}

main().catch(console.error);

// Fonction qui affiche la liste des bases de données
async function listDatabases(client){
    databasesList = await client.db().admin().listDatabases();
 
    console.log("Bases de données :");
    databasesList.databases.forEach(db => console.log(` - ${db.name}`));
};
Note : La première constante "MongoClient" est entre accolades (curly braces) au cas ou on devrait définir plusieurs constantes. Plus d'infos sur la connexion à serveur MongoDB depuis Node.js sur MongoDB post

Voir deux autres exemples de script de connexion qui affiche des données filtrées ou qui compte le nombre de documents d'une collection


< Page précédente NOT ONLY SQL