Suche…


Einführung

In diesem Thema erfahren Sie, wie Sie Node.js mithilfe des MYSQL-Datenbankverwaltungstools integrieren. Sie werden verschiedene Möglichkeiten kennenlernen, um mithilfe eines nodejs-Programms und -Skripts eine Verbindung zu Daten herzustellen und mit ihnen zu interagieren.

Fragen Sie ein Verbindungsobjekt mit Parametern ab

Wenn Sie benutzergenerierte Inhalte in der SQL verwenden möchten, ist dies mit Parametern erledigt. Für die Suche nach Benutzern mit dem Namen aminadav sollten Sie beispielsweise aminadav tun:

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.');
  }
});

Verwenden eines Verbindungspools

ein. Mehrere Abfragen gleichzeitig ausführen

Alle Abfragen in der MySQL-Verbindung werden nacheinander ausgeführt. Das bedeutet, wenn Sie 10 Abfragen durchführen möchten und jede Abfrage 2 Sekunden dauert, dauert es 20 Sekunden, bis die gesamte Ausführung abgeschlossen ist. Die Lösung besteht darin, 10 Verbindungen zu erstellen und jede Abfrage in einer anderen Verbindung auszuführen. Dies kann automatisch über den Verbindungspool erfolgen

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
  });
 }

Es werden alle 10 Abfragen parallel ausgeführt.

Wenn Sie den pool verwenden, brauchen Sie die Verbindung nicht mehr. Sie können den Pool direkt abfragen. Das MySQL-Modul sucht nach der nächsten freien Verbindung, um Ihre Abfrage auszuführen.

b. Mehrmandantenfähigkeit auf Datenbankservern mit verschiedenen darauf gehosteten Datenbanken.

Multitenancy ist heutzutage eine häufige Anforderung an Unternehmensanwendungen. Das Erstellen eines Verbindungspools für jede Datenbank im Datenbankserver wird nicht empfohlen. Stattdessen können Sie einen Verbindungspool mit dem Datenbankserver erstellen und dann bei Bedarf zwischen auf dem Datenbankserver gehosteten Datenbanken wechseln.

Angenommen, unsere Anwendung verfügt über unterschiedliche Datenbanken für jedes auf dem Datenbankserver gehostete Unternehmen. Wir werden eine Verbindung zu der jeweiligen Firmendatenbank herstellen, wenn der Benutzer die Anwendung besucht. Hier ist das Beispiel, wie das geht: -

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);
    });
});

Lassen Sie mich das Beispiel aufschlüsseln: -

Bei der Definition der Poolkonfiguration habe ich nicht den Datenbanknamen angegeben, sondern nur den Datenbankserver

{
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bobby',
  password        : 'pass'
}

Wenn wir also die spezifische Datenbank auf dem Datenbankserver verwenden möchten, bitten wir die Verbindung, die Datenbank zu treffen, indem Sie Folgendes verwenden: -

    connection.changeUser({database : "firm1"});

Die offizielle Dokumentation können Sie hier einsehen

Verbinden Sie sich mit MySQL

Eine der einfachsten Möglichkeiten , um MySQL zu verbinden , ist die Verwendung mysql - Modul. Dieses Modul übernimmt die Verbindung zwischen der Node.js-App und dem MySQL-Server. Sie können es wie jedes andere Modul installieren:

npm install --save mysql

Jetzt müssen Sie eine MySQL-Verbindung erstellen, die Sie später abfragen können.

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();

Im nächsten Beispiel erfahren Sie, wie Sie das connection abfragen.

Fragen Sie ein Verbindungsobjekt ohne Parameter ab

Sie senden die Abfrage als String und erhalten als Antwort einen Rückruf mit der Antwort. Der Rückruf gibt error , Array von rows und Feldern aus. Jede Zeile enthält die gesamte Spalte der zurückgegebenen Tabelle. Hier ist ein Ausschnitt für die folgende Erklärung.

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)
});

Führen Sie eine Reihe von Abfragen mit einer einzelnen Verbindung aus einem Pool aus

Es kann Situationen geben, in denen Sie einen Pool von MySQL-Verbindungen eingerichtet haben, aber Sie haben mehrere Abfragen, die Sie nacheinander ausführen möchten:

SELECT 1;
SELECT 2;

Sie könnten dann einfach mit pool.query wie anderswo ausgeführt laufen. Wenn Sie jedoch nur eine freie Verbindung im Pool haben, müssen Sie warten, bis eine Verbindung verfügbar ist, bevor Sie die zweite Abfrage ausführen können.

Sie können jedoch eine aktive Verbindung aus dem Pool beibehalten und so viele Abfragen ausführen, wie Sie möchten, indem Sie eine einzige Verbindung mit 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();
    });
  });
});

Anmerkung: Sie müssen daran denken, die Verbindung release , da sonst eine MySQL-Verbindung für den Rest des Pools verfügbar ist!

Weitere Informationen zum Pooling von MySQL-Verbindungen finden Sie in den MySQL-Dokumenten .

Gibt die Abfrage zurück, wenn ein Fehler auftritt

Sie können die ausgeführte Abfrage an das err anhängen, wenn ein Fehler auftritt:

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);
  }
});

Verbindungspool exportieren

// 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();
  });
});


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow