เนื้อหาดังต่อไปนี้เป็นเนื้อหาเมื่อปี 2023 ถูกปรับปรุงเรียบเรียงใหม่ 2026 ขอให้สนุกกับการเริ่มต้นกับโลก Programming อย่างภาษาง่าย ๆ ด้วย JavaScript กันเน่อ :)
NodeJS 101 — Part 1 📡 JavaScript Node.js Express
Akkarapon Phikulsri ・ Jan 8
🚀 การสร้าง API โดยใช้ JavaScript Node.js Express
คู่มือการพัฒนา RESTful API แบบครบวงจรด้วย Node.js, Express, Sequelize และ MySQL
📖 คำนำ
เอกสารฉบับนี้เป็นการพัฒนา web service หรือ RESTful API โดยใช้ภาษา JavaScript Node.js ร่วมกับเฟรมเวิร์กและไลบรารี่ต่าง ๆ ได้แก่:
- 🌐 Express HTTP Framework - สำหรับสร้าง web server
- 🗄️ 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
ไฟล์: index.js
const express = require('express')
const cors = require('cors') // ⚠️ แก้ไข: ควรเป็น 'cors' ไม่ใช่ '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
ติดตั้ง Nodemon สำหรับ Development
Development Dependencies:
npm install -D nodemon
Global Installation (Optional):
npm install -g nodemon
📋 Packages ที่ติดตั้ง:
| Package | Description |
|---|---|
express |
Web framework สำหรับ Node.js |
mysql2 |
MySQL client สำหรับ Node.js |
cors |
Middleware สำหรับจัดการ Cross-Origin Resource Sharing |
nodemon |
Auto-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, next) => {
try {
connection.query(
'SELECT * FROM `users`',
(err, results, fields) => {
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 user was failed", error: error.message });
}
})
// Get user by id
app.get('/users/:id', (req, res, next) => {
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 was failed", error: error.message });
}
})
🧪 ทดสอบ API
GET http://localhost:5000/users
GET http://localhost: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:
| Method | Endpoint | Description |
|---|---|---|
GET |
/users |
ดึงข้อมูล users ทั้งหมด |
GET |
/users/:id |
ดึงข้อมูล user ตาม id |
POST |
/users |
สร้าง user ใหม่ |
PUT |
/users/:id |
อัปเดตข้อมูล user |
DELETE |
/users/:id |
ลบ user |
NodeJS 101 — Part 3 🗄️MySQL + Sequelize
Akkarapon Phikulsri ・ Jan 8
Reference
akkaraponph
/
basic-nodejs-express-sequelize-mysql
สร้าง API โดยใช้ JavaScript Node.js Express
หมายเหตุ Tutorial นี้ได้จัดทำขึ้นเมื่อ (April 4th, 2023) และได้รับการปรับปรุงเมื่อ (January 8th, 2026)
🚀 การสร้าง API โดยใช้ JavaScript Node.js Express
คู่มือการพัฒนา RESTful API แบบครบวงจรด้วย Node.js, Express, Sequelize และ MySQL
📖 คำนำ
เอกสารฉบับนี้เป็นการพัฒนา web service หรือ RESTful API โดยใช้ภาษา JavaScript Node.js ร่วมกับเฟรมเวิร์กและไลบรารี่ต่าง ๆ ได้แก่:
- 🌐 Express HTTP Framework - สำหรับสร้าง web server
- 🗄️ Sequelize - ORM สำหรับจัดการฐานข้อมูล
- 💾 MySQL - ฐานข้อมูลเชิงสัมพันธ์
- 🔧 POSTMAN - สำหรับทดสอบ API
📚 สารบัญ
- Section 1-1 - 🎯 Intro
- Section 1-2 - 🛣️ สร้าง Route ด้วย Express
- Section 1-3 - 💡 ตัวอย่างการสร้าง API
- Section 1-4 - ⚙️ การสร้าง Scripts
- Section 1-5 - 🔄 RESTful API
- Section 1-6 - 📥 Method GET and API Params
- Section 1-7 - 📤 Using JSON and Method POST
- Section 1-8 - ✏️ Method PUT
- Section 1-9 - 🗑️ Method DELETE

Top comments (0)