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 :
mysql | Le plus connu | https://www.npmjs.com/package/mysql |
mysql2 | Se veut axé sur la performance et utilise les promises | https://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 :
mongodb | Le module officiel | https://www.npmjs.com/package/mongodb |
mongoose | Apporte l’utilisation schéma et modèle, des casting, etc. | https://www.npmjs.com/package/mongoose https://mongoosejs.com/ |
Mongojs | Se 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();
}
});
}
});
}