Предисловие
CRUD (сокр. от англ. create, read, update, delete — «создать, прочесть, обновить, удалить») — акроним, обозначающий четыре базовые функции, используемые при работе с персистентными хранилищами данных:
- C — создание;
- R — чтение;
- U — редактирование;
- D — удаление.
Термин стал популярным благодаря книге Джеймса Мартина (англ. James Martin) «Managing the Data-base Environment», выпущенной в 1983 году
Речь в данной статье пойдет об использовании модуля mysql для работы с БД MySQL. Проект находится в репозитории GitHub. Сначала нам необходимо ее установить через команду:
npm install mysql
Данный модуль полностью под лицензией MIT и являются полноценным драйвером MySQL для Node.js, написанный на JavaScript и не требует дополнительной компиляции.
Соединение и простой пример
Для начала необходимо соединиться с БД, подключив данный модуль к скрипту. Для этого пишем:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect();
Теперь можно выполнять любой запрос к БД со стороны сервера Node.js. Например, такой:
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end();
Некоторые особенности при работе с данным модулем
Каждая сессия обращения к БД через запросы должна начинаться с создания соединения
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect();
и заканчиваться операцией и закрытием. Если не закрыть соединения сеанса, то может быть выкинута ошибка. После соединения простой пример выборки может выглядеть вот так:
connect.query("SELECT * FROM media where code LIKE '"+data.mediaCode+"'", function (err, result, fields) { if (err) {throw err;} res.json({"flag":"isindb", "result":result}); connect.end(); });
Как организовать процесс обработки и выдачи запросов — это тема отдельной статьи.
CREATE — создание записи
Ниже представлен типичный простой код создания нового поля в таблице БД MySQL средствами Node.js:
//Делаем авторизацию connect = mysql.createConnection({ host: "hostname", user: "user", password: "password", database: "dbname" }); //Создание нового соединения connect.connect(function(err) { if (err) {throw err;} }); //Добавляем новое поле var post = {"colName1":"val1", "colName2":"val2", "colName3":"val3"}; connect.query('INSERT INTO tableName SET ?', post, function (err, result) { if (err) throw err; var data = {"flag":"myFlag","result":result}; //******Уведомляем клиента о добавлении до закрытия********* //res.json(data); //******Уведомляем клиента о добавлении до закрытия********* connect.end(); });
READ — чтение полей
Ниже представлен типичный простой код чтения поля из таблицы БД MySQL средствами Node.js:
//Делаем авторизацию connect = mysql.createConnection({ host: "hostname", user: "user", password: "password", database: "dbname" }); //Создание нового соединения connect.connect(function(err) { if (err) {throw err;} }); //Читаем поле(я) connect.query("SELECT * FROM tableName where colName1 LIKE 'keyValue'", function (err, result, fields) { if (err) {throw err;} //******Уведомляем клиента о добавлении до закрытия********* //res.json({"flag":"myFlag", "result":result}); //******Уведомляем клиента о добавлении до закрытия********* connect.end(); });
UPDATE- обновление/редактирование полей
Ниже представлен типичный простой код обновления/редактирования значения поля из таблицы БД MySQL средствами Node.js:
//Делаем авторизацию connect = mysql.createConnection({ host: "hostname", user: "user", password: "password", database: "dbname" }); //Создание нового соединения connect.connect(function(err) { if (err) {throw err;} }); //Обновляем/редактируем поле(я) connect.query("UPDATE tableName SET colName1 = 'val1' WHERE colName2 LIKE 'keyValue'", function (err, result) { if (err) {throw err}; //********Уведомляем клиента об удачной операции обновления/редактирования //res.json({"flag":"myFlag", "result":result}); //********Уведомляем клиента об удачной операции обновления/редактирования connect.end(); });
DELETE — удаление полей
Ниже представлен типичный простой код удаления строки из таблицы БД MySQL средствами Node.js:
//Делаем авторизацию connect = mysql.createConnection({ host: "hostname", user: "user", password: "password", database: "dbname" }); //Создание нового соединения connect.connect(function(err) { if (err) {throw err;} }); //Удаляем поле(я) connect.query("DELETE FROM tableName WHERE colName1 LIKE 'keyValue'", function (err, result) { if (err) {throw err;} //**************Уведомляем клиента об удачном удалении //res.json({"flag":"myFlag", "result":result}); //**************Уведомляем клиента об удачном удалении connect.end(); });
Пулл соединений в MySQL/Node.js
В примерах выще используется обычный подход соединения, ниже приведем код для пулл-соединения:
var mysql = require('mysql'); var dbConfig = { host: "myhost", user: "user", password: "password", database: "dbname", port:3306 }; var mysqlPool = mysql.createPool(dbConfig); mysqlPool.getConnection(function(err, connection) { if(err) throw err; connection.query("SELECT * FROM user where email LIKE 'myUserName'", function(err, result, fields) { if(err) { connection.release(); console.error(err); return; } res.json({"key":data.key,"result":result}); connection.release(); }); });