Простой CRUD с использованием MySQL и Node Js

CRUD — это аббревиатура от «CREATE, READ, UPDATE, DELETE» в SQL. По сути, мы собираемся продемонстрировать, как использовать MySQL в Node JS. Существует множество руководств о том, как создать CRUD с помощью Mongo DB, но мы действительно хотим показать здесь, как использовать SQL в Node Js.

ЧТО ВАМ НУЖНО ДЛЯ ЭТОГО РУКОВОДСТВА?
ЭС6/ЭС7
MySQL
НЕКОТОРЫЕ БАЗОВЫЕ ЗНАНИЯ NODE JS

ЧТО МЫ БУДЕМ СТРОИТЬ?
Мы собираемся создать TODO LIST с помощью Node JS, используя ES6 и Common JS. Все, что нам нужно в этом проекте, это «promise-mysql». Давайте установим: npm i -s promise-mysql

joanvasquez@local-coderghost:~/git/github/NodeJs-MySQL$ npm i -s promise-mysql
+ promise-mysql@3.3.1
updated 1 package and audited 18 packages in 1.21s
found 0 vulnerabilities

После установки пакета promise-mysql создадим структуру проекта.

# APP STRUCTURE
    * app.js -> the main file to run our project
    * dbConnection.js
    * queries
        - queries.js
    * Dao
        - TodoDao.js

ВРЕМЯ КОДИТЬ
Первое, что нам нужно сделать, это создать dbConnection.js.

const mysql = require('promise-mysql');

const dbConfig = {
        user: "joanvasquez",
        password: "Password2288_",
        database: "todo_dev",
        host: "localhost",
        connectionLimit: 10
}

module.exports = async () => {
    try {
        let pool;
        let con;
        if (pool) con = pool.getConnection();
        else {
            pool = await mysql.createPool(dbConfig);
            con = pool.getConnection();
        }
        return con;
    } catch (ex) {
        throw ex;
    }
}

Как мы видим, у нас есть объект с именем dbConfig, который содержит только информацию, необходимую для подключения к базе данных. Позже мы экспортируем асинхронную функцию, которая вернет соединение, полученное из пула соединений. Теперь давайте напишем несколько запросов для выполнения нашего CRUD.

module.exports = {
    insert_todo: `INSERT INTO tbl_todo(title, completed) VALUES(?, ?)`,
    read_todo: `SELECT * FROM tbl_todo`,
    update_todo: `UPDATE tbl_todo SET tbl_todo.title = ?, tbl_todo.completed = ? WHERE tbl_todo.id = ?`,
    delete_todo: `DELETE FROM tbl_todo WHERE tbl_todo.id = ?`
}

После создания запросов мы должны создать DAO и использовать наши запросы, я имею в виду, почему бы и нет?

const dbConnection = require("../dbConnection");
const queries = require("../queries/queries");

module.exports = class TodoDao {
  async saveEntity(entity) {
    let con = await dbConnection();
    try {
      await con.query("START TRANSACTION");
      let savedTodo = await con.query(
        queries.insert_todo,
        [entity.title, entity.completed]
      );
      await con.query("COMMIT");
      entity.id = savedTodo.insertId;
      return entity;
    } catch (ex) {
      await con.query("ROLLBACK");
      console.log(ex);
      throw ex;
    } finally {
      await con.release();
      await con.destroy();
    }
  }

  async updateEntity(entity) {
    let con = await dbConnection();
    try {
      await con.query("START TRANSACTION");
      await con.query(queries.update_todo, [
        entity.title,
        entity.completed,
        entity.id
      ]);
      await con.query("COMMIT");
      return true;
    } catch (ex) {
      await con.query("ROLLBACK");
      console.log(ex);
      throw ex;
    } finally {
      await con.release();
      await con.destroy();
    }
  }

  async deleteEntity(id) {
    let con = await dbConnection();
    try {
      await con.query("START TRANSACTION");
      await con.query(queries.delete_todo, [id]);
      await con.query("COMMIT");
      return true;
    } catch (ex) {
      await con.query("ROLLBACK");
      console.log(ex);
      throw ex;
    } finally {
      await con.release();
      await con.destroy();
    }
  }

  async readEntities() {
    let con = await dbConnection();
    try {
      await con.query("START TRANSACTION");
      let todo = await con.query(queries.read_todo);
      await con.query("COMMIT");
      todo = JSON.parse(JSON.stringify(todo));
      return todo;
    } catch (ex) {
      console.log(ex);
      throw ex;
    } finally {
      await con.release();
      await con.destroy();
    }
  }
};

Этот класс имеет все методы для CRUD. Все, что нам нужно сделать, это «НАЧАТЬ ТРАНЗАКЦИЮ, выполнить наш запрос и «КОММИТ» в БАЗУ ДАННЫХ». Наконец, мы должны выполнить методы CRUD.

const TodoDao = require("./Dao/TodoDao");
const todoDao = new TodoDao();

const app = async () => {
    let savedTodo = await todoDao.saveEntity({
        title: "Read a book of JS",
        completed: 0
    });
    console.log("Saved todo --> ", savedTodo)

    savedTodo.completed = 1;
    let isUpdated = await todoDao.updateEntity(savedTodo);
    console.log("Is it updated --> ", isUpdated);

    let todoList = await todoDao.readEntities();
    console.log("List of todo --> ", todoList);

    let isDeleted = await todoDao.deleteEntity(savedTodo.id);
    console.log("Is it deleted --> ", isDeleted)
}

app();

И результат:

Saved todo -->  { title: 'Read a book of JS', completed: 0, id: 1 }
Is it updated -->  true
List of todo -->  [ { id: 1, title: 'Read a book of JS', completed: 1 } ]
Is it deleted -->  true

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *