I Base de données Mysql

I.1 Introduction

Il existe plusieurs modules permettant de faire des requêtes SQL sur un serveur Mysql.

Ci-dessous une liste de modules les plus populaires :

mysqlLe plus connuhttps://www.npmjs.com/package/mysql
mysql2Se veut axé sur la performance et utilise les promiseshttps://www.npmjs.com/package/mysql2

I.2 Exemples

Bien lire les exemples fournit sur le site NPm du module mysql avant.

I.2.1 Exemple avec le module Mysql : un select puis renvoi json de la requete

Ce premier exemple se veut « asynchrone » de l’ouverture de la requête à la fin de la requête. Il gère également le retour d’erreur.


const express 		= require('express')
const mysql 		= require("mysql")

const app = express()  		// Instancie l'application express
app.set('view engine', 'ejs'); 	// associe le moteur de template Ejs à Express
const port = 8080


const paramsBdd = {
  host     : 'localhost',
  user     : 'root',
  password : '',
  database : 'open_food'
}


// Accueil
app.get("/",(req,res)=> {

	let requete = 'SELECT * FROM `oo_additifs` where commentaire like "%interdit%"'
	get_donnees(paramsBdd,requete, (error,requete,results)=> {
		if (error) {
			// Affiche erreur
			res.send("Erreur BDD :" + error) // ne pas faire en prod :)
		} else {
			// Affiche résultat requete sous forme json
			res.json(results)
		}
	})

})

// Ecoute serveur
app.listen(port, () => {
  console.log(`Ecoute sur le port:${port} avec Express`)
})


///////////////////////////////////////////////
//  --> event callback(error,requete,results)

function get_donnees(params,requete,callback) {

	var connection = mysql.createConnection(params);

	connection.connect((err)=> {
		if (err) {
		    console.error('error connexion MYSQL  : ' + err.stack)
		    // --> renvoie erreur
		    callback(error=err,undefined,undefined)
		    return
		}

		console.log('Connexion MYSQL OK as id ' + connection.threadId)
		connection.query( requete, (error, results, fields)=> {
			if (error) {
				// --> renvoie erreur
				callback(error=error,undefined,undefined)
				return
			} 
		 	// --> renvoie le résultat de la requête
		 	callback(error = undefined,requete = requete,res = results)
		 	console.log('Requete : ', requete)
		 	
			// ferme la connexion
			connection.end((error)=>{
				  if (error) {
				  	console.error('Error end mysql : ' + error)
				  } 
			});
		});
	});
}

I.2.2 Exemple avec le module Mysql2 : un select puis renvoi json de la requête

Pour info : le même code de l’exemple ci-dessus fonctionne avec le module mysql2. Ainsi pour la documentation il faut se référer au module « mysql » pour Node

Le code ci-dessous montre l’utilisation de ce module en utilisant les promises. Seule le contenu de la fonction « get_donnees » change.

const express 		= require('express')
const path 			= require('path')
const bodyParser 	= require('body-parser')
const mysql 		= require("mysql2/promise")

const app = express()  			// Instancie l'application express
app.set('view engine', 'ejs'); 	// associe le moteur de template Ejs à Express
const port = 8080


const paramsBdd = {
  host     : 'localhost',
  user     : 'root',
  password : '',
  database : 'open_food'
}


////////////////////////
// Enregistrement Middleware Express

// enregistrement du middleware bodyparser
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies


// Accueil
app.get("/",(req,res)=> {

	let requete = 'SELECT * FROM `oo_additifs` where commentaire like "%interdit%"'
	
	get_donnees(paramsBdd,requete, (error,requete,results)=> {
		if (error) {
			// Affiche erreur
			res.send("Erreur BDD :" + error) // ne pas faire en prod ;)
		} else {
			// Affiche résultat requete sous forme json
			res.json(results[0])
		}
	})

})

// Ecoute serveur
app.listen(port, () => {
  console.log(`Ecoute sur le port:${port} avec Express`)
})



/////////////////////
//  
async function get_donnees(params,requete,callback) {

    try{
	// create the connection
	const connection = await mysql.createConnection(params)
	// query database
	const tab_resultat = await connection.execute(requete);
        // callback pour renvoyer le résultat
	callback (null,requete,tab_resultat)
    } catch(err) {
        // si erreur callback envoyé avec l'erreur
    	callback(err,undefined,undefined)
    }

}

Plus simple à écrire et à lire !!!

II Base de données MongoDb

II.1 Introduction

Comme pour Mysql, il existe plusieurs modules pour se connecter sur une base de données NOSQL MongoDB :

mongodbLe module officielhttps://www.npmjs.com/package/mongodb
mongooseApporte l’utilisation schéma et modèle, des casting, etc. https://www.npmjs.com/package/mongoose
https://mongoosejs.com/
MongojsSe veut simple à utiliser …https://www.npmjs.com/package/mongojs

II.2 Exemples

II.2.1 Module Mongodb : sélection d’un jeu de données

Ce exemple montre comment interroger une base de données dans MongoDb et récupérer un élément :



const express 		= require('express')
const MongoClient 	= require('mongodb').MongoClient;

const app = express()  			// Instancie l'application express
const port = 8080


// Accueil
app.get("/",(req,res)=> {

	
	get_donnees( (error,results)=> {
		if (error) {
			// Affiche erreur
			res.send("Erreur BDD :" + error) // ne pas faire en prod ;)
		} else {
			// Affiche résultat requete sous forme json
			res.json(results)
		}
	})
})

// Ecoute serveur
app.listen(port, () => {
  console.log(`Ecoute sur le port:${port} avec Express !!!`)
})



/*
*	
*/
function get_donnees(callback) {

	// Connection URL
	const url = 'mongodb://localhost:27017';
	// Database Name
	const dbName = 'open_food_facts';

	//Connexion au serveur
	MongoClient.connect(url,{'useUnifiedTopology' : 'true'}, function(err, client) {
	  if (err) {
	  		// erreur : on renvoi via callback
	  		callback(err,undefined)
	  } else {
		  // se connecte à la base de données
		  const db = client.db(dbName);
  		  // Se place sur la collection "produit"
  		  const collection = db.collection('produit');
  		  // Effectue une recherche
  		  collection.find({'_id' : '000000001124'}).toArray(function(err, docs) {
			 if (err) {
			 	// erreur : on renvoie
			 	callback(err,undefined)
			 } else {
			 	// produit trouvé : on renvoie
				callback(undefined,docs)
				// ferme la connection
				client.close();
			 }
		  });
	  }	
	});

}

Node.js : modules externes Bases De Données

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *