Accès mySql avec node.js
Dans cet article, je vous montre comment se connecter et faire des requêtes sur une base de données mysql avec node.js. L’utilisation de mysql avec node.js nécessite l’installation d’un module spécifique.
Prérequis
– Avoir un serveur mysql installé;
– savoir ce qu’est node.js (voir l’article Comprendre node.js
– avoir installé node.js (voir l’article Installer node.js sous Windows).
Création d’une base de données et d’une table sous mysql
Rien de complexe ici, il suffit d’exécuter les scripts suivants sous mysql. Rien ne vous empêche d’utiliser phpmyadmin pour le faire.
La création de la base de données mysqltest.
create database mysqltest;
La création de la tables test test.
use mysqltest;
CREATE TABLE IF NOT EXISTS `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`label` varchar(16) NOT NULL,
`valeur` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Installation du module nodejs mysql
Depuis la ligne de commande, placez dans le dossier de votre projet test et exécutez la commande suivante.
npm install mysql
Vous devriez voir se faire l’installation comme suit.
npm http GET https://registry.npmjs.org/mysql
npm http 304 https://registry.npmjs.org/mysql
npm http GET https://registry.npmjs.org/require-all/0.0.3
npm http GET https://registry.npmjs.org/bignumber.js/1.0.1
npm http GET https://registry.npmjs.org/readable-stream
npm http 304 https://registry.npmjs.org/require-all/0.0.3
npm http 304 https://registry.npmjs.org/bignumber.js/1.0.1
npm http 304 https://registry.npmjs.org/readable-stream
npm http GET https://registry.npmjs.org/string_decoder
npm http GET https://registry.npmjs.org/core-util-is
npm http GET https://registry.npmjs.org/debuglog/0.0.2
npm http 304 https://registry.npmjs.org/core-util-is
npm http 304 https://registry.npmjs.org/string_decoder
npm http 304 https://registry.npmjs.org/debuglog/0.0.2
mysql@2.1.0 node_modules\mysql
├── require-all@0.0.3
├── readable-stream@1.1.11 (debuglog@0.0.2, string_decoder@0.10.25-1, core-util-is@1.0.1)
└── bignumber.js@1.0.1
La partie javascript
Toujours dans le dossier de votre projet, créez un fichier mysql.js destiné à intégrer le code javascript se connectant à la base de données mysql.
Récupérez une instance d’objet mysql depuis le module installé.
let mysql = require('mysql');
Initialisez une connexion à la base de données par le biais de l’objet mysql obtenu ci-dessus. Un objet de connexion (nommé dans l’exemple mySqlClient) vous est renvoyé (pensez à mettre vos propres paramètres de connexion).
let mySqlClient = mysql.createConnection({
host : "localhost",
user : "user",
password : "password",
database : "mysqlTest"
});
Dans l’exemple, on récupère toutes les données de la table test sans distinction.
SELECT * FROM test
Cliquez sur le bouton Install pour finaliser l’installation. L’écran de déroulement de l’installation s’affiche.
La table test comporte 3 champs (id, label et valeur), et la requête les extrait tous (select *).
Extraction des données : première méthode
Pour exécuter une requête sql select et en extraire le résultat, l’objet de connexion mySqlClient met à disposition la méthode query qui prend en paramètres :
– la requête sql à exécuter sous forme d’une chaine de caractères;
– une fonction anonyme appelée après l’exécution de la requête.
La fonction anonyme prend en paramètres :
– un objet indicateur d’erreur (error) fixé à true en cas d’erreur à l’exécution de la requête;
– une hashtable comportant les données extraites à partir de la requête exécutée (results);
– le nombre de champs ou colonnes renvoyés par la requête sql (fields).
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();
}
);
L’appel de la méthode end sur l’objet de connexion mySqlClient clôt la connexion au serveur mysql.
Extraction des données : deuxième méthode
Ici on utilise pas une fonction callback mais deux événements liés à la librairie. L’événement result se déclenche à chaque fois qu’une ligne de la requête sql est renvoyé. L’événement end se déclenche lorsque l’exécution de la requête est terminée et l’événement error se déclenche lorsqu’une erreur survient.
let selectQuery = 'SELECT * FROM test';
let sqlQuery = mySqlClient.query(selectQuery);
sqlQuery.on("result", function(row) {
console.log('myField1: ' + row.myField1);
console.log('myField2: ' + row.myField2);
});
sqlQuery.on("end", function() {
mySqlClient.end();
});
sqlQuery.on("error", function(error) {
console.log(error);
});
Vous avez vu mysql avec node.js. Dans un prochain article, je vous montrerai comment créer une bibliothèque javascript pour node.js dédiée à l’accès à la base de données mysql.