Accès mysql avec node.js (mise à jour 20/04/2014)

nodejs_mysql

 

Dans cet article, je vous montre comment se connecter et faire des requêtes sur une base de données mysql depuis un script node.js. Pour la version anglaise, cliquez sur MYSQL ACCESS FROM NODE.JS. L’utilisation de mysql avec node.js nécessite l’installation d’un module spécifique, la suite ci-dessous…


 

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é :

var mysql = require('mysql');

En initialisant 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) :

var 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

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).

var selectQuery = 'SELECT * FROM test';
 
mySqlClient.query(
  selectQuery,
  function select(error, results, fields) {
    if (error) {
      console.log(error);
      mySqlClient.end();
      return;
    }
 
    if ( results.length > 0 )  { 
      var 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 déclenché à chaque fois qu’une ligne de la requête sql est renvoyé, l’événement end déclenché lorsque l’exécution de la requête est terminée et l’événement error déclenché lorsqu’une erreur survient.

var selectQuery = 'SELECT * FROM test';
 
var 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);
});
Des remarques, des améliorations, des idées, des coquilles : faites le savoir. Faites savoir si cet article vous a été utile par le biais d’un commentaire ou des réseaux sociaux.

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.

 

2 commentaires pour Accès mysql avec node.js (mise à jour 20/04/2014)

Laisser une réponse

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>