Поиск…


Вступление

В этом разделе вы узнаете, как интегрироваться с Node.js с помощью инструмента управления базами данных MYSQL. Вы узнаете различные способы подключения и взаимодействия с данными, находящимися в mysql, с помощью программы и скрипта nodejs.

Запрос объекта соединения с параметрами

Когда вы хотите использовать созданный пользователем контент в SQL, он выполняется с параметрами. Например, для поиска пользователя с именем aminadav вы должны:

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

Использование пула соединений

а. Выполнение нескольких запросов одновременно

Все запросы в соединении MySQL выполняются один за другим. Это означает, что если вы хотите сделать 10 запросов, и каждый запрос занимает 2 секунды, для завершения всего выполнения потребуется 20 секунд. Решение состоит в том, чтобы создать 10 соединений и запустить каждый запрос в другом соединении. Это можно сделать автоматически, используя пул соединений

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

Он будет запускать все 10 запросов параллельно.

Когда вы используете pool вам больше не нужно подключение. Вы можете напрямую запросить пул. Модуль MySQL будет искать следующее бесплатное соединение для выполнения вашего запроса.

б. Достижение многоуровневости на сервере базы данных с различными базами данных, размещенными на нем.

В настоящее время многозадачность является общим требованием к корпоративному приложению, и создание пула соединений для каждой базы данных на сервере базы данных не рекомендуется. поэтому вместо этого мы можем создать пул соединений с сервером базы данных и затем переключать их между базами данных, размещенными на сервере базы данных по требованию.

Предположим, что наше приложение имеет разные базы данных для каждой фирмы, размещенной на сервере базы данных. Мы подключаемся к соответствующей базе данных фирмы, когда пользователь обращается к приложению. Вот пример того, как это сделать: -

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

Позвольте мне разбить пример:

При определении конфигурации пула я не дал имя базы данных, но дал только сервер базы данных, т. Е.

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

поэтому, когда мы хотим использовать конкретную базу данных на сервере базы данных, мы запрашиваем подключение к базе данных, используя: -

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

вы можете сослаться на официальную документацию здесь

Подключение к MySQL

Одним из самых простых способов подключения к MySQL является использование модуля mysql . Этот модуль обрабатывает соединение между приложением Node.js и сервером MySQL. Вы можете установить его, как и любой другой модуль:

npm install --save mysql

Теперь вам нужно создать соединение mysql, которое вы можете позже запросить.

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

В следующем примере вы узнаете, как запрашивать объект connection .

Запрос объекта соединения без параметров

Вы отправляете запрос в виде строки и в ответном обратном вызове ответ получен. Обратный вызов дает вам error , массив rows и полей. Каждая строка содержит весь столбец возвращенной таблицы. Ниже приведен фрагмент следующего объяснения.

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

Запустить несколько запросов с одним соединением из пула

Могут быть ситуации, когда вы настроили пул соединений MySQL, но у вас есть несколько запросов, которые вы хотели бы запустить последовательно:

SELECT 1;
SELECT 2;

Вы можете просто запустить, используя pool.query как показано в другом месте , однако, если у вас есть только одно бесплатное соединение в пуле, вы должны подождать, пока соединение станет доступным, прежде чем вы сможете запустить второй запрос.

Однако вы можете сохранить активное соединение из пула и запустить столько запросов, сколько хотите использовать одно соединение, используя 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();
    });
  });
});

Примечание. Вы должны помнить о том, чтобы release соединение, иначе есть еще одно соединение MySQL, доступное для остальной части пула!

Для получения дополнительной информации об объединении соединений MySQL ознакомьтесь с документами MySQL .

Вернуть запрос при возникновении ошибки

Вы можете присоединить запрос, выполняемый к вашему объекту err когда возникает ошибка:

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

Пул подключения экспорта

// 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow