Node.js
Intégration MySQL
Recherche…
Introduction
Dans cette rubrique, vous apprendrez comment intégrer Node.js à l'aide de l'outil de gestion de base de données MYSQL. Vous apprendrez différentes manières de vous connecter et d’interagir avec des données résidant dans mysql en utilisant un script et un programme nodejs.
Interroger un objet de connexion avec des paramètres
Lorsque vous souhaitez utiliser le contenu généré par l'utilisateur dans le SQL, cela se fait avec des paramètres. Par exemple, pour rechercher un utilisateur portant le nom aminadav
vous devez faire:
var username = 'aminadav';
var querystring = 'SELECT name, email from users where name = ?';
connection.query(querystring, [username], function(err, rows, fields) {
if (err) throw err;
if (rows.length) {
rows.forEach(function(row) {
console.log(row.name, 'email address is', row.email);
});
} else {
console.log('There were no results.');
}
});
Utiliser un pool de connexions
une. Exécuter plusieurs requêtes en même temps
Toutes les requêtes en connexion MySQL se font l'une après l'autre. Cela signifie que si vous voulez faire 10 requêtes et que chaque requête prend 2 secondes, cela prendra 20 secondes pour terminer l'exécution. La solution consiste à créer une connexion 10 et à exécuter chaque requête dans une connexion différente. Cela peut être fait automatiquement en utilisant le pool de connexion
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass',
database : 'schema'
});
for(var i=0;i<10;i++){
pool.query('SELECT ` as example', function(err, rows, fields) {
if (err) throw err;
console.log(rows[0].example); //Show 1
});
}
Il exécutera les 10 requêtes en parallèle.
Lorsque vous utilisez un pool
vous n'avez plus besoin de la connexion. Vous pouvez interroger directement la piscine. Le module MySQL recherchera la prochaine connexion gratuite pour exécuter votre requête.
b. Atteindre la multi-location sur un serveur de base de données avec différentes bases de données hébergées sur celui-ci.
La multitenancy est une exigence courante des applications d'entreprise de nos jours et la création d'un pool de connexions pour chaque base de données sur un serveur de base de données n'est pas recommandée. Ainsi, nous pouvons au lieu de cela créer un pool de connexions avec le serveur de base de données, puis les basculer entre les bases de données hébergées sur le serveur de base de données à la demande.
Supposons que notre application dispose de différentes bases de données pour chaque entreprise hébergée sur un serveur de base de données. Nous allons nous connecter à la base de données de l'entreprise respective lorsque l'utilisateur accède à l'application. Voici l'exemple sur la façon de faire cela: -
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass'
});
pool.getConnection(function(err, connection){
if(err){
return cb(err);
}
connection.changeUser({database : "firm1"});
connection.query("SELECT * from history", function(err, data){
connection.release();
cb(err, data);
});
});
Laissez-moi décomposer l'exemple: -
Lors de la définition de la configuration du pool, je n'ai pas donné le nom de la base de données, mais uniquement le serveur de base de données, c.-à-d.
{
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass'
}
Ainsi, lorsque nous voulons utiliser la base de données spécifique sur le serveur de base de données, nous demandons à la connexion d'accéder à la base de données en utilisant: -
connection.changeUser({database : "firm1"});
vous pouvez consulter la documentation officielle ici
Se connecter à MySQL
L'un des moyens les plus simples de se connecter à MySQL est d'utiliser le module mysql
. Ce module gère la connexion entre l'application Node.js et le serveur MySQL. Vous pouvez l'installer comme n'importe quel autre module:
npm install --save mysql
Maintenant, vous devez créer une connexion mysql, que vous pourrez ensuite interroger.
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'database_schema'
});
connection.connect();
// Execute some query statements
// I.e. SELECT * FROM FOO
connection.end();
Dans l'exemple suivant, vous apprendrez à interroger l'objet de connection
.
Interroger un objet de connexion sans paramètres
Vous envoyez la requête en tant que chaîne et en réponse, le rappel avec la réponse est reçu. Le rappel vous donne une error
, un tableau de rows
et de champs. Chaque ligne contient toute la colonne de la table renvoyée. Voici un extrait pour l'explication suivante.
connection.query('SELECT name,email from users', function(err, rows, fields) {
if (err) throw err;
console.log('There are:', rows.length,' users');
console.log('First user name is:',rows[0].name)
});
Exécuter un certain nombre de requêtes avec une seule connexion à partir d'un pool
Il peut y avoir des situations où vous avez configuré un pool de connexions MySQL, mais vous avez plusieurs requêtes à exécuter en séquence:
SELECT 1; SELECT 2;
Vous pourriez simplement exécuter en utilisant pool.query
comme vu ailleurs , cependant si vous n'avez qu'une seule connexion libre dans le pool, vous devez attendre qu'une connexion devienne disponible avant de pouvoir exécuter la deuxième requête.
Vous pouvez toutefois conserver une connexion active depuis le pool et exécuter autant de requêtes que vous le souhaitez en utilisant une seule connexion à l'aide de pool.getConnection
:
pool.getConnection(function (err, conn) { if (err) return callback(err); conn.query('SELECT 1 AS seq', function (err, rows) { if (err) throw err; conn.query('SELECT 2 AS seq', function (err, rows) { if (err) throw err; conn.release(); callback(); }); }); });
Note: Vous devez vous rappeler de release
la connexion, sinon il y a une connexion MySQL de moins disponible pour le reste du pool!
Pour plus d'informations sur la mise en commun des connexions MySQL, consultez les documents MySQL .
Renvoyer la requête en cas d'erreur
Vous pouvez attacher la requête exécutée à votre objet err
lorsqu'une erreur se produit:
var q = mysql.query('SELECT `name` FROM `pokedex` WHERE `id` = ?', [ 25 ], function (err, result) { if (err) { // Table 'test.pokedex' doesn't exist err.query = q.sql; // SELECT `name` FROM `pokedex` WHERE `id` = 25 callback(err); } else { callback(null, result); } });
Pool de connexions d'exportation
// db.js
const mysql = require('mysql');
const pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bob',
password : 'secret',
database : 'my_db'
});
module.export = {
getConnection: (callback) => {
return pool.getConnection(callback);
}
}
// app.js
const db = require('./db');
db.getConnection((err, conn) => {
conn.query('SELECT something from sometable', (error, results, fields) => {
// get the results
conn.release();
});
});