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.