Bắt đầu với Node.js và MySQL2

https://medium-com.translate.goog/@sahni_hargun/getting-started-with-node-js-and-mysql2-519407a8e7de?_x_tr_sl=auto&_x_tr_tl=vi&_x_tr_hl=en&_x_tr_pto=wapp

Example 1

Hầu hết các ứng dụng trong thế giới thực đều cần một cơ sở dữ liệu để hoạt động. Có nhiều loại cơ sở dữ liệu trong đó phổ biến nhất là cơ sở dữ liệu quan hệ (SQL) và cơ sở dữ liệu phi quan hệ (NoSQL). Đối với hướng dẫn này, chúng ta sẽ sử dụng cơ sở dữ liệu quan hệ với sự trợ giúp của thư viện npm có tên là mysql2.

MySQL là gì?

MySQL là một hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở. Nó là mã nguồn mở và đáng tin cậy cho cả các ứng dụng quy mô nhỏ và quy mô lớn.

Thiết lập bảng và dữ liệu

Mở Workbench và thêm kết nối mới bằng cách sử dụng mật khẩu đã tạo trong quá trình cài đặt.

Chạy truy vấn này để tạo cơ sở dữ liệu mới:

CREATE DATABASE sicMundus;

Chạy truy vấn này để sử dụng cơ sở dữ liệu được tạo ở trên:

USE sicMundus;

Chạy truy vấn tạo này để tạo một bảng mới có tên sicMundus:

CREATE TABLE sicMundus(
  id INTEGER PRIMARY KEY AUTO_INCREMENT,
  firstName varchar(255) NOT NULL,
  lastName varchar(255)
);

Sau khi tạo bảng, hãy chạy lệnh này để chèn một số giá trị vào bảng này:

INSERT INTO sicMundus (firstName, lastName)       
VALUES ('Adam',''),
       ('Noah',''),
       ('Magnus','Nielsen'),
       ('Agnes','Nielsen'),
       ('Franziska','Doppler'),
       ('Bartosz','Tiedemann'),
       ('Elisabeth','Doppler'),
       ('Charlotte','Doppler'),
       ('Gustavv','Tanhaus'),
       ('Leopold','Tanhaus'), 
       ('Heinrich','Tanhaus'),
       ('Silja','Tiedemann');

Bắt đầu

Thiết lập máy chủ Express.js:

  1. Tạo một thư mục mới có tên là getting-started-with-node-and-mysql.

  2. Điều hướng đến thư mục mới và chạy các lệnh sau:

package.json

{
  "name": "sic",
  "version": "1.0.0",
  "main": "app.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "express": "^4.21.1",
    "mysql2": "^3.11.5"
  },
  "devDependencies": {
    "@types/express": "^5.0.0",
    "@types/node": "^22.10.1"
  }
}

app.js

import express from 'express';
import mysql from 'mysql2/promise';
var app = express();
const connection = await mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'sicMundus'
});
app.get('/members', async function(req, res){
  const [members, fields] = await connection.query("Select * from sicMundus");
  res.send({members});
});
app.listen(process.env.PORT || 3000,function(req,res){
  console.log("Server Started!");
});

Example 2

package.json

{
  "name": "sic",
  "version": "1.0.0",
  "main": "app.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "body-parser": "^1.20.3",
    "express": "^4.21.1",
    "mysql2": "^3.11.5"
  },
  "devDependencies": {
    "@types/express": "^5.0.0",
    "@types/node": "^22.10.1"
  }
}

app.js

import express from "express";
import bodyParser  from "body-parser";
import * as council from "./council.js";
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// GET ALL
app.get("/council", async function (req, res) {
  const councilMembers = await council.getCouncilMembers();
  res.send({ councilMembers });
});
// GET
app.get("/council/:id", async function (req, res) {
  const id = req.params.id;
  const councilMember = await council.getCouncilMemberById(id);
  res.send(councilMember);
});
// POST
app.post("/council", async function (req, res) {
  const firstName = req.body.firstName;
  const lastName = req.body.lastName;
  await council.addCouncilMember(firstName, lastName);
  res.send({ message: "Success" });
});
// PUT
app.put("/council/:id", async function (req, res) {
  const id = req.params.id;
  const firstName = req.body.firstName;
  const lastName = req.body.lastName;
  await council.editCouncilMember(id, firstName, lastName);
  res.send({ message: "Success" });
});
// DELETE
app.delete("/council/:id", async function (req, res) {
  const id = req.params.id;
  await council.removeCouncilMember(id);
  res.send({ message: "Success" });
});
app.listen(process.env.PORT || 3000,function(req,res){
  console.log("Server Started!");
});

connection.js

import mysql from 'mysql2';
export const connection = mysql.createConnection({
    host: '127.0.0.1',
    user: 'root',
    password: '',
    database: 'jediCouncil'
});

council.js

import {connection} from "./connection.js";
export async function getCouncilMembers() {
  return new Promise((resolve, reject) => {
    connection.query("Select * from jediCouncil", (err, rows) => {
      if (err) reject(err);
      else resolve(rows);
    });
  });
}
export function getCouncilMemberById(id) {
  return new Promise((resolve, reject) => {
    connection.query(
      "SELECT * FROM jediCouncil where id = ?",
      [id],
      (err, rows) => {
        if (err) reject(err);
        else resolve(rows);
      }
    );
  });
}
export function addCouncilMember(firstName, lastName) {
  return new Promise((resolve, reject) => {
    connection.query(
      "INSERT INTO jediCouncil (firstName, lastName) VALUES (?, ?)",
      [firstName, lastName],
      (err) => {
        if (err) reject(err);
        else resolve();
      }
    );
  });
}
export function editCouncilMember(id, firstName, lastName) {
  return new Promise((resolve, reject) => {
    connection.query(
      "UPDATE jediCouncil SET firstName = (?), lastName = (?) where id = (?)",
      [firstName, lastName, id],
      (err) => {
        if (err) reject(err);
        else resolve();
      }
    );
  });
}
export function removeCouncilMember(id) {
  return new Promise((resolve, reject) => {
    connection.query("DELETE FROM jediCouncil WHERE id = (?)", [id], (err) => {
      if (err) reject(err);
      else resolve();
    });
  });
}

npm init 
npm install express 
npm install body-parser 
npm install mysql2

Thiết lập bảng và dữ liệu

Chúng ta sẽ tạo một bảng bằng MySQL Workbench để có thể truy cập bảng đó bằng ứng dụng Node.js. Mở Workbench và thêm một kết nối mới.

Chạy truy vấn này để tạo cơ sở dữ liệu mới:

CREATE DATABASE jediCouncil;

Chạy truy vấn này để sử dụng cơ sở dữ liệu được tạo ở trên:

USE jediCouncil;

Chạy truy vấn tạo này để tạo một bảng mới có tên jediCouncil:

CREATE TABLE jediCouncil(
  id INTEGER PRIMARY KEY AUTO_INCREMENT,
  firstName varchar(255) NOT NULL,
  lastName varchar(255)
);

Sau khi tạo bảng, hãy chạy lệnh này để chèn một số giá trị vào bảng này:

INSERT INTO jediCouncil (firstName, lastName)       
VALUES ('Yoda',''),
       ('Mace','Windu'),
       ('Plo','Koon'),
       ('Depa','Billaba'),
       ('Kit','Fisto'),
       ('Adi','Gallia'),
       ('Saesee','Tiin'),
       ('Shaak','Ti'),
       ('Anakin','Skywalker');

Thiết lập REST API

GET (ALL)

async function getCouncilMembers() {
  return new Promise((resolve, reject) => {
    connection.query("Select * from jediCouncil", (err, rows) => {
      if (err) reject(err);
      else resolve(rows);
    });
  });
}
app.get("/council", async function (req, res) {
  const councilMembers = await council.getCouncilMembers();
  res.send({ councilMembers });
});

GET

function getCouncilMemberById(id) {
  return new Promise((resolve, reject) => {
      connection.query('SELECT * FROM jediCouncil where id = ?',[id], (err, rows) => {
          if(err)
              reject(err);
          else
              resolve(rows);
      });
  });
}
app.get("/council/:id", async function(req, res) {
  const id = req.params.id;
  const councilMember = await council.getCouncilMemberById(id);
  res.send(councilMember);
});

POST

function addCouncilMember(firstName, lastName) {
  return new Promise((resolve, reject) => {
      connection.query('INSERT INTO jediCouncil (firstName, lastName) VALUES (?, ?)', [firstName, lastName], (err) => {
          if(err)
              reject(err);
          else
              resolve();
      });
  });
}
app.post("/council", async function(req, res) {
  const firstName = req.body.firstName;
  const lastName = req.body.lastName;
  await council.addCouncilMember(firstName, lastName);
  res.send({"message": "Success"});
});

PUT

function editCouncilMember(id, firstName, lastName) {
  return new Promise((resolve, reject) => {
      connection.query('UPDATE jediCouncil SET firstName = (?), lastName = (?) where id = (?)', [firstName, lastName, id], (err) => {
          if(err)
              reject(err);
          else
              resolve();
      });
  });
}
app.put("/council/:id", async function(req, res) {
  const id = req.params.id;
  const firstName = req.body.firstName;
  const lastName = req.body.lastName;
  await council.editCouncilMember(id,firstName,lastName);
  res.send({"message": "Success"});
});

DELETE

function removeCouncilMember(id) {
    return new Promise((resolve, reject) => {
        connection.query('DELETE FROM jediCouncil WHERE id = (?)', [id], (err) => {
            if(err)
                reject(err);
            else
                resolve();
        });
    });
}

app.delete("/council/:id", async function(req, res) {
    const id = req.params.id;
    await council.removeCouncilMember(id);
    res.send({"message": "Success"});
});

Máy chủ Node.js

Sau đây là trích xuất tất cả các tập tin có trong dự án cuối cùng:

package.json

{
  "name": "rest-api-with-node-and-mysql",
  "version": "1.0.0",
  "description": "REST API with Node.js and MySQL",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "singhhr",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.20.2",
    "express": "^4.19.2",
    "mysql2": "^3.10.0"
  }
}

connection.js

const mysql = require('mysql2');

const connection = mysql.createConnection({
    host: '127.0.0.1',
    user: 'root',
    password: 'admin',
    database: 'jediCouncil'
});

module.exports = connection;

council.js

const connection = require('./connection');

async function getCouncilMembers() {
    return new Promise((resolve, reject) => {
        connection.query('Select * from jediCouncil', (err, rows) => {
            if(err)
                reject(err);
            else
                resolve(rows);
        });
    });
}

function getCouncilMemberById(id) {
    return new Promise((resolve, reject) => {
        connection.query('SELECT * FROM jediCouncil where id = ?',[id], (err, rows) => {
            if(err)
                reject(err);
            else
                resolve(rows);
        });
    });
} 

function addCouncilMember(firstName, lastName) {
    return new Promise((resolve, reject) => {
        connection.query('INSERT INTO jediCouncil (firstName, lastName) VALUES (?, ?)', [firstName, lastName], (err) => {
            if(err)
                reject(err);
            else
                resolve();
        });
    });
}

function editCouncilMember(id, firstName, lastName) {
    return new Promise((resolve, reject) => {
        connection.query('UPDATE jediCouncil SET firstName = (?), lastName = (?) where id = (?)', [firstName, lastName, id], (err) => {
            if(err)
                reject(err);
            else
                resolve();
        });
    });
}

function removeCouncilMember(id) {
    return new Promise((resolve, reject) => {
        connection.query('DELETE FROM jediCouncil WHERE id = (?)', [id], (err) => {
            if(err)
                reject(err);
            else
                resolve();
        });
    });
}

module.exports = {
    getCouncilMembers,
    getCouncilMemberById,
    addCouncilMember,
    editCouncilMember,
    removeCouncilMember
};

index.js

var express = require('express');
var bodyParser = require("body-parser");
const council = require('./council');

var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// GET ALL
app.get('/council', async function(req, res){
    const councilMembers = await council.getCouncilMembers();
    res.send({councilMembers});
});

// GET
app.get("/council/:id", async function(req, res) {
    const id = req.params.id;
    const councilMember = await council.getCouncilMemberById(id);
    res.send(councilMember);
});

// POST
app.post("/council", async function(req, res) {
    const firstName = req.body.firstName;
    const lastName = req.body.lastName;
    await council.addCouncilMember(firstName, lastName);
    res.send({"message": "Success"});
});

// PUT
app.put("/council/:id", async function(req, res) {
    const id = req.params.id;
    const firstName = req.body.firstName;
    const lastName = req.body.lastName;
    await council.editCouncilMember(id,firstName,lastName);
    res.send({"message": "Success"});
});

// DELETE
app.delete("/council/:id", async function(req, res) {
    const id = req.params.id;
    await council.removeCouncilMember(id);
    res.send({"message": "Success"});
});

app.listen(process.env.PORT || 3000,function(req,res){
    console.log("Server Started!");
});

To run the server run this command in the terminal in the project directory: node index.js

You will see the message in the console ‘Server Started!’ which means the server is up and running. You can go to Chrome and go localhost:3000/council to get response from your server:

Last updated