Sau khi đã làm quen với Node.js và NPM, bước tiếp theo thực tế nhất là ứng dụng Node.js để xây dựng một Web Server / RESTful API. Trong hệ sinh thái Node.js, Express.js là framework phổ biến nhất, đóng vai trò tương tự như Flask hoặc FastAPI trong Python.
Mặc định Node.js có sẵn module http để tạo server, nhưng code rất dài dòng và phức tạp. Express.js là một thư viện tối giản (Minimalist Framework) giúp bạn:
Dễ dàng định nghĩa các Routes (Đường dẫn URL như /api/users, /api/products).
Lắng nghe các HTTP Methods (GET, POST, PUT, DELETE).
Quản lý dữ liệu gửi lên (Request) và phản hồi về (Response) dưới dạng JSON.
Sử dụng Middleware để xử lý logic trung gian (xác thực, log, giải mã dữ liệu).
Khi xây dựng API, chúng ta sử dụng các phương thức HTTP tương ứng với thao tác CRUD (Create, Read, Update, Delete):
| HTTP Method | Thao tác CRUD | Chức năng | Ví dụ URL |
| GET | Read | Lấy danh sách hoặc chi tiết dữ liệu | GET /api/books |
| POST | Create | Tạo mới một tài nguyên | POST /api/books |
| PUT | Update | Cập nhật toàn bộ tài nguyên | PUT /api/books/1 |
| DELETE | Delete | Xóa một tài nguyên | DELETE /api/books/1 |
Chúng ta sẽ cùng viết một ứng dụng hoàn chỉnh quản lý danh sách sách trong file server.js.
Mở Terminal tại thư mục thực hành của bạn và chạy các lệnh sau:
# 1. Tạo thư mục bài tập mới
mkdir express-demo && cd express-demo
# 2. Khởi tạo file package.json
npm init -y
# 3. Cài đặt Express
npm install express
Cập nhật file package.json để dùng cú pháp import/export bằng cách thêm "type": "module":
{
"name": "express-demo",
"version": "1.0.0",
"type": "module",
"scripts": {
"start": "node server.js",
"dev": "node --watch server.js"
},
"dependencies": {
"express": "^4.19.2"
}
}
(Mẹo: cờ --watch của Node.js giúp server tự động khởi động lại mỗi khi bạn Ctrl+S lưu file).
server.js)Tạo file server.js và dán toàn bộ đoạn code dưới đây:
import express from 'express';
const app = express();
const PORT = 3000;
// 1. MIDDLEWARE: Cho phép Express đọc và giải mã dữ liệu dạng JSON gửi từ Client (Body Parser)
app.use(express.json());
// Cơ sở dữ liệu giả lập (In-memory Database)
let books = [
{ id: 1, title: 'Lập trình JavaScript Hiện Đại', author: 'Tuan' },
{ id: 2, title: 'Nhập môn Node.js & Express', author: 'Nam' }
];
// =================================================================
// 2. CÁC ROUTES (ENDPOINTS) RESTFUL API
// =================================================================
// [GET] /api/books - Lấy toàn bộ danh sách sách
app.get('/api/books', (req, res) => {
res.status(200).json({
success: true,
data: books
});
});
// [GET] /api/books/:id - Lấy thông tin 1 quyển sách theo ID (Route Parameters)
app.get('/api/books/:id', (req, res) => {
const bookId = parseInt(req.params.id, 10);
const book = books.find(b => b.id === bookId);
if (!book) {
return res.status(404).json({
success: false,
message: 'Không tìm thấy quyển sách này!'
});
}
res.status(200).json({ success: true, data: book });
});
// [POST] /api/books - Thêm một quyển sách mới
app.post('/api/books', (req, res) => {
const { title, author } = req.body;
// Validate dữ liệu đầu vào cơ bản
if (!title || !author) {
return res.status(400).json({
success: false,
message: 'Vui lòng điền đầy đủ tiêu đề và tác giả!'
});
}
const newBook = {
id: books.length + 1,
title,
author
};
books.push(newBook);
res.status(201).json({ success: true, data: newBook });
});
// [DELETE] /api/books/:id - Xóa một quyển sách
app.delete('/api/books/:id', (req, res) => {
const bookId = parseInt(req.params.id, 10);
const initialLength = books.length;
// Lọc bỏ quyển sách có ID trùng khớp
books = books.filter(b => b.id !== bookId);
if (books.length === initialLength) {
return res.status(404).json({
success: false,
message: 'Không tìm thấy sách để xóa!'
});
}
res.status(200).json({
success: true,
message: `Đã xóa thành công sách có ID: ${bookId}`
});
});
// =================================================================
// 3. KHỞI CHẠY SERVER
// =================================================================
app.listen(PORT, () => {
console.log(`Server đang chạy tại đường dẫn: http://localhost:${PORT}`);
});
Mở Terminal và khởi chạy server bằng lệnh dev script vừa tạo:
npm run dev
Terminal sẽ hiện: Server đang chạy tại đường dẫn: http://localhost:3000
Cách kiểm tra API:
Cách đơn giản nhất: Mở trình duyệt web và truy cập URL: http://localhost:3000/api/books để xem danh sách sách dạng JSON.
Cách chuyên nghiệp: Dùng phần mềm như Postman, Thunder Client (Extension trên VS Code), hoặc dùng lệnh curl trong Terminal để kiểm tra các phương thức POST, DELETE.
curl -X POST http://localhost:3000/api/books \
-H "Content-Type: application/json" \
-d "{\"title\": \"Kinh nghiệm Actuary\", \"author\": \"Minh\"}"
app.use(express.json()): Luôn phải có dòng này ở đầu file nếu API của bạn nhận dữ liệu gửi lên qua body dạng JSON.
req.params: Dùng để lấy biến động trên URL (Ví dụ: /api/books/:id ➔ req.params.id).
req.body: Dùng để lấy dữ liệu gửi lên từ form hoặc JSON body trong phương thức POST/PUT.
res.status().json(): Phương thức phản hồi tiêu chuẩn trả về Mã trạng thái HTTP (200, 201, 400, 404, 500) kèm chuỗi dữ liệu JSON.