Créer une librairie node.js
L’objet de cet article va être de s’inspirer du code javascript de l’article Accès mysql avec node.js, pour créer une librairie node.js d’accès aux données par le biais d’un namespace javascript…..
Prérequis pour créer une librairie node.js
– Avoir un serveur mysql installé;
– savoir ce qu’est node.js (voir l’article Comprendre node.js
– installer node.js (voir l’article Installer node.js sous Windows);
– lire l’article Accès mysql avec node.js;
– lire l’article Les namespace javascript.
Le code existant
Le code suivant exécute une requête SQL (SELECT * FROM test) à l’aide de la librairie mysql et en affiche le résultat dans la console javascript.
L’exemple ci-dessous utilise la librairie mysql de manière brutale :
– il crée un objet mysql;
– puis crée une connexion qui renvoie un objet à partir duquel les requêtes sql sont exécutées.
let mysql = require('mysql');
let mySqlClient = mysql.createConnection({
host : "localhost",
user : "user",
password : "password",
database : "mysqlTest"
});
let selectQuery = 'SELECT * FROM test';
mySqlClient.query(
selectQuery,
function select(error, results, fields) {
if (error) {
console.log(error);
mySqlClient.end();
return;
}
if ( results.length > 0 ) {
let firstResult = results[ 0 ];
console.log('id: ' + firstResult['id']);
console.log('label: ' + firstResult['label']);
console.log('valeur: ' + firstResult['valeur']);
} else {
console.log("Pas de données");
}
mySqlClient.end();
}
);
Réorganisation du code existant au sein d’un namespace javascript
La première chose à faire est d’intégrer le code existant dans un namespace en utilisant la notation json.
Ce namespace comporte :
– 2 attributs : mysql dédié à l’instanciation d’un objet node.js de la librairie mysql et mySqlClient objet dédié à la connexion à la base de données;
– une méthode connect prenant en paramètres le données de connexion (hôte, utilisateur, mot de passe et base de données);
– une méthode close de fermeture de connexion à la base de données;
– une méthode executeSelectQuery exécutant une requête sql select donnée en paramètre et qui en retourne le résultat sous forme d’un tableau.
Le code modifié.
db = {
mysql : require('mysql'),
mySqlClient : null,
connect : function (host, user, password, database) {
this.mysql = require('mysql');
this.mySqlClient = this.mysql.createConnection({
host : host,
user : user,
password : password,
database : database
});
},
close : function() {
this.mySqlClient.end();
},
executeSelectQuery : function( selectQuery, callbackResultFunction ) {
this.mySqlClient.query(
selectQuery,
function select(error, results, fields) {
if (error) {
console.log(error);
this.mySqlClient.end();
return;
}
if ( results.length > 0 ) {
callbackResultFunction(results);
} else {
console.log("Pas de données");
}
this.mySqlClient.end();
});
}
};
Transformer le code produit en librairie node.js
L’utilisation d’un simple mot clé transformera le namespace javascript en librairie : module.exports. Le code change donc très peu et devient.
db = module.exports = {
mysql : require('mysql'),
mySqlClient : null,
connect : function (host, user, password, database) {
this.mysql = require('mysql');
this.mySqlClient = this.mysql.createConnection({
host : host,
user : user,
password : password,
database : database
});
},
close : function() {
this.mySqlClient.end();
},
executeSelectQuery : function( selectQuery, callbackResultFunction ) {
this.mySqlClient.query(
selectQuery,
function select(error, results, fields) {
if (error) {
console.log(error);
this.mySqlClient.end();
return;
}
if ( results.length > 0 ) {
callbackResultFunction(results);
} else {
console.log("Pas de données");
}
this.mySqlClient.end();
});
}
};
Utiliser la librairie node.js
La librairie que vous créez s’utilise à l’identique qu’une librairie node.js : par le biais du mot clé require en prenant en paramètre le chemin complet vers le fichier de votre librairie nouvellement créée.
Pour l’exemple, imaginez que vous ayez une base de données nommée mysqlTest encapsulant une table test avec deux champs myField1 et myField2.
Le traitement des données se fait par le biais d’une fonction nommée processResult passée en paramètre de la méthode executeSelectQuery.
let db = require('db.js');
let processResult = function(row) {
for(key in row){
console.log(row[key].myField1);
console.log(row[key].myField2);
}
}
db.connect("localhost", "user", "password", "mysqlTest");
db.executeSelectQuery("select * from test",processResult);
La fonction processResult est appelée et c’est à elle de parser la structure de données au format json row.
Remarques
Créer une librairie node.js qui fait la même chose que la librairie mysql n’a aucun sens. La librairie mysql fait très bien son travail.
L’intérêt ici est de spécialiser le code pour répondre à votre besoin en créant une librairie qui lui est dédiée. Pour faire une analogie, on peut comparer cette librairie à un DAO (Database Access Object).
Par exemple, un DAO permet de sauvegarder des données relatives aux joueurs d’un jeu vidéo.