Рубрики
Без рубрики

Простой Crud с использованием MySQL и узла JS

В этом посте я покажу вам, как создать CRUD, используя узлы JS и MySQL.

Автор оригинала: Joan Manuel Vasquez.

Crud – это аббревиатура для «создания, чтения, обновления, удаления» в SQL. В основном то, что мы собираемся продемонстрировать, так это использовать mysql в узле js. Там есть много учебных пособий на том, как сделать Crud, используя Mongo DB, но что мы действительно хотим показать здесь, так как использовать SQL в узле JS.

Что нужно следовать этому руководству? ES6/ES7 MySQL Некоторые базовые знания узла JS

Что мы собираемся построить? Мы собираемся создать список TODO с узлом js, используя ES6 и Common JS. Все, что нам нужно в этом проекте, это «обещание-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

После установки пакета обещания 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, который содержит только информацию, необходимую для подключения к базе данных. Позже мы экспортируем асинхронную функцию, которая вернет соединение, полученное из пула соединений. Теперь давайте напишем некоторые запросы, чтобы выполнить наш грунт.

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