Szukaj…


Wprowadzenie

W tym temacie nauczysz się integrować z Node.js za pomocą narzędzia do zarządzania bazą danych MYSQL. Poznasz różne sposoby łączenia i interakcji z danymi rezydującymi w mysql za pomocą programu i skryptu nodejs.

Zapytaj obiekt połączenia o parametry

Jeśli chcesz użyć treści SQL wygenerowanej przez użytkownika, należy to zrobić z parametrami. Na przykład, aby wyszukać użytkownika o nazwie aminadav , powinieneś:

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

Korzystanie z puli połączeń

za. Uruchamianie wielu zapytań jednocześnie

Wszystkie zapytania w połączeniu MySQL są wykonywane jeden po drugim. Oznacza to, że jeśli chcesz wykonać 10 zapytań, a każde z nich zajmie 2 sekundy, wykonanie całego zadania zajmie 20 sekund. Rozwiązaniem jest utworzenie 10 połączeń i uruchomienie każdego zapytania w innym połączeniu. Można to zrobić automatycznie przy użyciu puli połączeń

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

Uruchomi wszystkie 10 zapytań równolegle.

Kiedy korzystasz z pool , nie potrzebujesz już połączenia. Możesz wysłać zapytanie bezpośrednio do puli. Moduł MySQL wyszuka następne bezpłatne połączenie w celu wykonania zapytania.

b. Osiągnięcie wielu dzierżaw na serwerze bazy danych z hostowanymi na nim różnymi bazami danych.

Wielozadaniowość jest obecnie powszechnym wymogiem aplikacji korporacyjnych i nie jest zalecane tworzenie puli połączeń dla każdej bazy danych na serwerze bazy danych. więc zamiast tego możemy utworzyć pulę połączeń z serwerem bazy danych, a następnie przełączać je między bazami danych hostowanymi na serwerze bazy danych na żądanie.

Załóżmy, że nasza aplikacja ma różne bazy danych dla każdej firmy hostowanej na serwerze bazy danych. Po uzyskaniu dostępu do aplikacji połączymy się z odpowiednią firmową bazą danych. Oto przykład, jak to zrobić:

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

Pozwól mi rozbić przykład:

Podczas definiowania konfiguracji puli nie podałem nazwy bazy danych, a jedynie serwer bazy danych, tj

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

więc gdy chcemy użyć konkretnej bazy danych na serwerze bazy danych, prosimy o połączenie z bazą danych za pomocą:

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

możesz zapoznać się z oficjalną dokumentacją tutaj

Połącz się z MySQL

Jednym z najprostszych sposobów połączenia z MySQL jest użycie modułu mysql . Ten moduł obsługuje połączenie między aplikacją Node.js a serwerem MySQL. Możesz zainstalować go jak każdy inny moduł:

npm install --save mysql

Teraz musisz utworzyć połączenie mysql, które możesz później wyszukać.

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

W następnym przykładzie dowiesz się, jak wysłać zapytanie do obiektu connection .

Zapytaj obiekt połączenia bez parametrów

Wysyłasz zapytanie jako ciąg znaków iw odpowiedzi odbierane jest wywołanie zwrotne z odpowiedzią. Oddzwonienie daje error , tablicę rows i pól. Każdy wiersz zawiera całą kolumnę zwróconej tabeli. Oto fragment poniższego wyjaśnienia.

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

Uruchom wiele zapytań za pomocą jednego połączenia z puli

Mogą wystąpić sytuacje, w których skonfigurujesz pulę połączeń MySQL, ale masz wiele zapytań, które chcesz uruchamiać w kolejności:

SELECT 1;
SELECT 2;

Można po prostu uruchomić następnie używając pool.query jak widać gdzie indziej , ale jeśli masz tylko jedno wolne połączenie w basenie trzeba czekać, aż gra będzie dostępna, zanim będzie można uruchomić drugą kwerendę.

Możesz jednak zachować aktywne połączenie z puli i uruchomić tyle zapytań, ile chcesz, używając pojedynczego połączenia za pomocą 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();
    });
  });
});

Uwaga: musisz pamiętać o release połączenia, w przeciwnym razie do reszty puli będzie dostępne jedno połączenie MySQL!

Aby uzyskać więcej informacji na temat łączenia połączeń MySQL, zapoznaj się z dokumentacją MySQL .

Zwraca zapytanie, gdy wystąpi błąd

Możesz dołączyć zapytanie wykonane do obiektu err gdy wystąpi błąd:

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

Eksportuj pulę połączeń

// 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow