Организация CRUD в Node.js и MySQL

Предисловие

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