Node.js: подключение к базе данных MySQL (особенности, советы, примеры)

Node.js стремительно набирает популярность среди веб-разработчиков. Одна из ключевых причин - это простота подключения Node.js к базам данных, в частности к популярной MySQL. В этой статье мы подробно разберем, как настроить соединение Node.js и MySQL, рассмотрим различные способы взаимодействия и приведем рабочие примеры кода. Поехали!

Введение в MySQL

MySQL - это популярная открытая реляционная система управления базами данных (RDBMS). Она была создана шведской компанией MySQL AB в 1995 году. Сейчас MySQL принадлежит корпорации Oracle.

MySQL отличается высокой производительностью, надежностью и простотой использования. Это делает ее идеальным выбором для веб-приложений, которым требуется работа с данными в режиме реального времени.

Основные преимущества MySQL:

  • Высокая скорость обработки запросов
  • Масштабируемость - способность обрабатывать огромные объемы данных
  • Гибкая система привилегий и безопасности
  • Кроссплатформенность - работает на многих ОС (Windows, Linux, macOS и др.)
  • Открытый исходный код

MySQL поддерживает множество типов данных, включая числовые, строковые, даты и время. Также реализована поддержка сложных запросов, триггеров, транзакций, хранимых процедур и многое другое.

Установка MySQL и подключение к Node.js

Для начала необходимо установить СУБД MySQL. Можно использовать локальную установку или облачные сервисы типа Amazon RDS, Azure Database for MySQL и т.п.

Установка локального сервера MySQL

Для Windows и macOS установщик MySQL можно скачать на официальном сайте MySQL. На Linux MySQL обычно доступен в репозиториях пакетов дистрибутива.

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

 mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'password'; mysql> CREATE DATABASE mydb; mysql> GRANT ALL ON mydb.* TO 'myuser'@'localhost'; 

Теперь можно приступать к подключению MySQL из Node.js.

Подключение к MySQL из Node.js

Существует несколько популярных драйверов MySQL для Node.js, в том числе:

  • mysqljs
  • mysql2
  • node-mysql

Рассмотрим пример использования пакета mysql2, который считается наиболее быстрым и современным.

Установим mysql2 через npm:

 npm install mysql2 

Теперь можно подключиться к базе данных.

 const mysql = require('mysql2'); const connection = mysql.createConnection({ host: 'localhost', user: 'myuser', database: 'mydb', password: 'password' }); connection.connect(function(err) { if (err) { return console.error('Ошибка: ' + err.message); } console.log('Подключение к MySQL успешно установлено'); }); 

В параметры подключения можно передать дополнительные настройки - таймаут, кодировку, режим запросов в пуле и т.д. Подробнее смотрите документацию mysql2.

Также можно использовать пулы подключений. Это позволяет повторно использовать соединения и ускорить работу при множестве запросов к БД:

 const mysql = require('mysql2/promise'); const pool = mysql.createPool({ // параметры подключения }); // Получить соединение из пула const connection = await pool.getConnection(); // Использовать соединение... // Вернуть соединение в пул connection.release(); 

Итак, мы разобрали как установить MySQL и подключить ее к Node.js при помощи драйвера mysql2. Далее перейдем к выполнению запросов и получению результатов.

Выполнение запросов к MySQL из Node.js

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

Простые SQL-запросы

Для выполнения SQL-запроса используется метод query() объекта соединения. Передаем SQL в виде строки:

 connection.query('SELECT * FROM users', function(err, results) { // обработка результатов запроса }); 

Для INSERT, UPDATE, DELETE запросов используется тот же метод query():

 connection.query('INSERT INTO users VALUES (1, "John", "Doe")'); 

Также можно использовать подготовленные запросы с плейсхолдерами для параметров:

 connection.query('SELECT * FROM users WHERE id = ?', [userId], function(err, results) { // ... }); 

Получение результатов запроса

Для SELECT запроса в callback передается объект results, содержащий массив строк - результат запроса:

 connection.query('SELECT * FROM users', function(err, results) { console.log(results); // [ {id: 1, name: 'John'}, ...] }); 

Для запросов INSERT, UPDATE, DELETE в results будет содержаться количество затронутых строк:

 connection.query('DELETE FROM users WHERE id = ?', [userId], function(err, results) { console.log(results.affectedRows); // 1 } ); 

Транзакции

Транзакции позволяют объединить несколько запросов в один логический блок. Либо выполняются все запросы успешно, либо откатываются все изменения.

Для управления транзакцией используются методы beginTransaction(), commit() и rollback():

 connection.beginTransaction(function(err) { // запросы connection.commit(function(err) { // транзакция зафиксирована }); }); 

При ошибке вызываем rollback() для отмены транзакции.

Подготовленные выражения

Подготовленные выражения позволяют эффективно использовать один шаблон запроса с разными параметрами.

 const sql = 'SELECT * FROM users WHERE id = ?'; connection.execute(sql, [1], function(err, results) { // ... }); connection.execute(sql, [2], function(err, results) { // ... }); 

Это избавляет от многократного парсинга одинаковых запросов на стороне MySQL.

Комментарии