NodeJS 101 — Part 2 MySQL

Published: (January 7, 2026 at 11:04 PM EST)
5 min read
Source: Dev.to

Source: Dev.to

📖 คำนำ

เอกสารฉบับนี้เป็นการพัฒนา web service หรือ RESTful API โดยใช้ภาษา JavaScript (Node.js) ร่วมกับเฟรมเวิร์กและไลบรารีต่าง ๆ ได้แก่

  • 🌐 Express – HTTP framework สำหรับสร้างเว็บเซิร์ฟเวอร์
  • 🗄️ Sequelize – ORM สำหรับจัดการฐานข้อมูล
  • 💾 MySQL – ฐานข้อมูลเชิงสัมพันธ์
  • 🔧 POSTMAN – เครื่องมือทดสอบ API

📚 สารบัญ

Module 2: 💾 Basic API MySQL

เรียนรู้การเชื่อมต่อและใช้งาน MySQL Database กับ Express

⬆ กลับไปที่สารบัญ

Section 2‑1 – 🚀 Create New App Express and MySQL

⬆ กลับไปที่สารบัญ

📁 สร้างโปรเจกต์ใหม่

  1. สร้างโฟลเดอร์ demo-mysql

    mkdir demo-mysql
  2. เข้าไปในโฟลเดอร์ demo-mysql

    cd demo-mysql

    ⚠️ หมายเหตุ: คำสั่ง cd mkdir demo-mysql ที่ปรากฏในเอกสารเดิมไม่ถูกต้อง ควรใช้ cd demo-mysql หลังจากสร้างโฟลเดอร์แล้ว

  3. สร้าง Node.js Application

    npm init -y

    คำสั่งนี้จะสร้างไฟล์ package.json อัตโนมัติ

📄 สร้างไฟล์ index.js

const express = require('express');
const cors = require('cors');          // ✅ ใช้แพคเกจ cors แทนการ require('express')
const PORT = process.env.PORT || 5000;
const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());

app.listen(PORT, () => {
    console.log(`CORS enabled server listening on ${PORT}`);
});

⚠️ หมายเหตุ: โค้ดเดิมใช้ require('express') สำหรับ cors ซึ่งไม่ถูกต้อง ควรใช้ require('cors')

📦 ติดตั้ง Packages ที่จำเป็น

Packages หลัก

npm install express mysql2 cors --save

Development Dependency – Nodemon

npm install -D nodemon

หากต้องการติดตั้งแบบ global (ไม่บังคับ)

npm install -g nodemon

📋 Packages ที่ติดตั้ง

PackageDescription
expressWeb framework สำหรับ Node.js
mysql2MySQL client สำหรับ Node.js
corsMiddleware สำหรับจัดการ Cross‑Origin Resource Sharing
nodemonAuto‑restart server เมื่อมีการแก้ไขไฟล์

Section 2‑2 – 🔌 Connect MySQL Database

⬆ กลับไปที่สารบัญ

📦 Import MySQL2

เพิ่มบรรทัดต่อไปนี้ในไฟล์ index.js

const mysql = require('mysql2');

🔌 เชื่อมต่อฐานข้อมูล MySQL

วิธีที่ 1 – ใช้ค่าคงที่

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'basic_api_express_db'
});

วิธีที่ 2 – ใช้ Environment Variables (แนะนำ) ⭐

const connection = mysql.createConnection({
    host: process.env.DB_HOSTNAME   || 'localhost',
    user: process.env.DB_USERNAME   || 'root',
    password: process.env.DB_PASSWORD || '',
    database: process.env.DB_DATABASE || 'basic_api_express_db'
});

💡 แนะนำ: ใช้วิธีที่ 2 เพื่อความปลอดภัยและความยืดหยุ่นในการ deploy

📥 ทดสอบดึงข้อมูลจากฐานข้อมูล

เพิ่มโค้ดต่อไปนี้ใน index.js

// Get all users
app.get('/users', (req, res) => {
    try {
        connection.query('SELECT * FROM `users`', (err, results) => {
            if (err) {
                return res.status(500).json({ message: "Database error", error: err });
            }
            res.status(200).json(results);
        });
    } catch (error) {
        res.status(400).json({ message: "Get users failed", error: error.message });
    }
});

// Get user by id
app.get('/users/:id', (req, res) => {
    try {
        const id = req.params.id;
        connection.query(
            'SELECT * FROM `users` WHERE `id` = ?',
            [id],
            (err, results) => {
                if (err) {
                    return res.status(500).json({ message: "Database error", error: err });
                }
                if (results.length === 0) {
                    return res.status(404).json({ message: "User not found" });
                }
                res.status(200).json({ payload: results });
            }
        );
    } catch (error) {
        res.status(400).json({ message: "Get user by id failed", error: error.message });
    }
});

🧪 ทดสอบ API

GET http://localhost:5000/users
GET http://localhost:5000/users/1

Section 2‑3 – ➕ CREATE USER

(เนื้อหายังไม่ได้ระบุ – ใส่โค้ดและคำอธิบายต่อไปนี้ตามต้องการ)

Section 2‑4 – ✏️ UPDATE USER

(เนื้อหายังไม่ได้ระบุ – ใส่โค้ดและคำอธิบายต่อไปนี้ตามต้องการ)

Section 2‑5 – 🗑️ DELETE USER

(เนื้อหายังไม่ได้ระบุ – ใส่โค้ดและคำอธิบายต่อไปนี้ตามต้องการ)


หมายเหตุ: หากต้องการเพิ่มส่วนของการสร้าง, แก้ไข, และลบผู้ใช้ ให้ทำตามรูปแบบของ GET /users และ GET /users/:id โดยใช้ INSERT, UPDATE, DELETE ผ่าน connection.query พร้อมจัดการ error handling อย่างเดียวกัน.

5000/users/1


Section 2‑3 – ➕ CREATE USER

⬆ กลับไปที่สารบัญ

➕ สร้าง User ใหม่

เพิ่มในไฟล์: index.js

app.post('/users', (req, res, next) => {
    try {
        const { fname, lname, username, password, avatar } = req.body;

        connection.query(
            'INSERT INTO `users`(`fname`, `lname`, `username`, `password`, `avatar`) VALUES (?, ?, ?, ?, ?)',
            [fname, lname, username, password, avatar],
            (err, results) => {
                if (err) {
                    return res.status(500).json({
                        message: "create user was failed",
                        error: err.message
                    });
                }
                res.status(201).json({
                    message: "create user was successfully",
                    payload: results
                });
            }
        );
    } catch (error) {
        res.status(400).json({
            message: "create user was failed",
            error: error.message
        });
    }
});

🔍 อธิบายโค้ด

  • INSERT INTO – คำสั่ง SQL สำหรับเพิ่มข้อมูล
  • ? – Placeholder สำหรับป้องกัน SQL injection
  • status(201) – HTTP status code สำหรับการสร้างข้อมูลสำเร็จ

🧪 ทดสอบ API

POST http://localhost:5000/users
Content-Type: application/json

{
  "fname": "John",
  "lname": "Doe",
  "username": "johndoe",
  "password": "password123",
  "avatar": "https://example.com/avatar.jpg"
}

Section 2‑4 – ✏️ UPDATE USER

⬆ กลับไปที่สารบัญ

✏️ อัปเดตข้อมูล User

เพิ่มในไฟล์: index.js

app.put('/users/:id', (req, res, next) => {
    try {
        const id = req.params.id;
        const { fname, lname, username, password, avatar } = req.body;

        connection.query(
            'UPDATE `users` SET `fname`= ?, `lname`= ?, `username`= ?, `password`= ?, `avatar`= ? WHERE id = ?',
            [fname, lname, username, password, avatar, id],
            (err, results) => {
                if (err) {
                    return res.status(500).json({
                        message: "update user was failed",
                        error: err.message
                    });
                }
                if (results.affectedRows === 0) {
                    return res.status(404).json({
                        message: "User not found"
                    });
                }
                res.status(200).json({
                    message: "update user was successfully",
                    payload: results
                });
            }
        );
    } catch (error) {
        res.status(400).json({
            message: "update user was failed",
            error: error.message
        });
    }
});

🔍 อธิบายโค้ด

  • UPDATE – คำสั่ง SQL สำหรับอัปเดตข้อมูล
  • affectedRows – จำนวนแถวที่ถูกอัปเดต (0 = ไม่พบข้อมูล)

🧪 ทดสอบ API

PUT http://localhost:5000/users/1
Content-Type: application/json

{
  "fname": "Jane",
  "lname": "Doe",
  "username": "janedoe",
  "password": "newpassword123",
  "avatar": "https://example.com/new-avatar.jpg"
}

Section 2‑5 – 🗑️ DELETE USER

⬆ กลับไปที่สารบัญ

🗑️ ลบข้อมูล User

เพิ่มในไฟล์: index.js

app.delete('/users/:id', (req, res, next) => {
    try {
        const id = req.params.id;

        connection.query(
            'DELETE FROM `users` WHERE id = ?',
            [id],
            (err, results) => {
                if (err) {
                    return res.status(500).json({
                        message: "delete user was failed",
                        error: err.message
                    });
                }
                if (results.affectedRows === 0) {
                    return res.status(404).json({
                        message: "User not found"
                    });
                }
                res.status(200).json({
                    message: "delete user was successfully",
                    payload: results
                });
            }
        );
    } catch (error) {
        res.status(400).json({
            message: "delete user was failed",
            error: error.message
        });
    }
});

🔍 อธิบายโค้ด

  • DELETE FROM – คำสั่ง SQL สำหรับลบข้อมูล
  • affectedRows – จำนวนแถวที่ถูกลบ (0 = ไม่พบข้อมูล)

🧪 ทดสอบ API

DELETE http://localhost:5000/users/1

🎉 สรุป Module 2

เราได้เรียนรู้การเชื่อมต่อและใช้งาน MySQL Database กับ Express ครบทั้ง CRUD Operations

MethodEndpointDescription
GET/usersดึงข้อมูล users ทั้งหมด
GET/users/:idดึงข้อมูล user ตาม id
POST/usersสร้าง user ใหม่
PUT/users/:idอัปเดตข้อมูล user
DELETE/users/:idลบ user

Reference

Back to Blog

Related posts

Read more »

JavaScript DOM Explained for Beginners

What is DOM? DOM stands for Document Object Model. It is a tree‑like representation of your HTML document that JavaScript can: - read - change - add to - remov...