Mongo NodeJS
Gérer les données d'un serveur MongoDB avec NodeJS
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
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.jsonC:\projet_node> npm init --y
C:\projet_node> npm install --S mongodb
Connexion à MongoDB Atlas
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
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.jsconst 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();
}
});
C:\projet_node> node app.js
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}`));
};
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