Routing trong Node.js
Routing (định tuyến) trong Node.js giúp xác định cách xử lý các yêu cầu HTTP dựa trên đường dẫn URL (/home
, /about
, v.v.) và phương thức HTTP (GET
, POST
, v.v.).

1. Tạo các route đơn giản
Dưới đây là cách tạo một server HTTP và định tuyến các đường dẫn /home
và /about
bằng module http
:
Ví dụ: Routing cơ bản
const http = require("http");
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain; charset=UTF-8" });
if (req.url === "/home") {
res.end("Trang chủ");
} else if (req.url === "/about") {
res.end("Giới thiệu về chúng tôi");
} else {
res.writeHead(404, { "Content-Type": "text/plain" });
res.end("404 - Không tìm thấy trang");
}
});
server.listen(3000, () => {
console.log("Server đang chạy tại http://localhost:3000");
});
Giải thích:
-
req.url
chứa đường dẫn của request. - Nếu
req.url === "/home"
, server trả về"Trang chủ"
. - Nếu
req.url === "/about"
, server trả về"Giới thiệu về chúng tôi"
. - Nếu không có route nào khớp, server trả về 404 - Không tìm thấy trang.
Mở trình duyệt và truy cập http://localhost:3000/home hoặc http://localhost:3000/about để kiểm tra.
2. Xử lý request body và query string
2.1. Xử lý Query String
Query string là phần tham số sau dấu ?
trên URL, ví dụ:
http://localhost:3000/search?keyword=nodejs
Dưới đây là cách đọc query string trong Node.js:
const http = require("http");
const url = require("url");
const server = http.createServer((req, res) => {
const parsedUrl = url.parse(req.url, true);
res.writeHead(200, { "Content-Type": "text/plain; charset=UTF-8" });
if (parsedUrl.pathname === "/search") {
const keyword = parsedUrl.query.keyword;
res.end(`Kết quả tìm kiếm cho: ${keyword}`);
} else {
res.writeHead(404, { "Content-Type": "text/plain" });
res.end("404 - Không tìm thấy trang");
}
});
server.listen(3000, () => {
console.log("Server đang chạy tại http://localhost:3000");
});
Giải thích:
-
url.parse(req.url, true)
giúp tách URL thànhpathname
vàquery
. -
parsedUrl.query.keyword
lấy giá trị tham sốkeyword
. - Nếu truy cập http://localhost:3000/search?keyword=nodejs, server sẽ phản hồi:
Kết quả tìm kiếm cho: nodejs
2.2. Xử lý Request Body (POST Request)
Khi client gửi dữ liệu qua phương thức POST
, dữ liệu không nằm trong URL mà được gửi trong body của request.
const http = require("http");
const server = http.createServer((req, res) => {
if (req.method === "POST" && req.url === "/submit") {
let body = "";
req.on("data", (chunk) => {
body += chunk.toString(); // Chuyển dữ liệu thành chuỗi
});
req.on("end", () => {
res.writeHead(200, { "Content-Type": "text/plain; charset=UTF-8" });
res.end(`Dữ liệu nhận được: ${body}`);
});
} else {
res.writeHead(404, { "Content-Type": "text/plain" });
res.end("404 - Không tìm thấy trang");
}
});
server.listen(3000, () => {
console.log("Server đang chạy tại http://localhost:3000");
});
Giải thích:
- Kiểm tra
req.method === "POST"
để chỉ xử lý khi nhận yêu cầuPOST
. - Sử dụng
req.on("data")
để đọc dữ liệu từ request body. - Sử dụng
req.on("end")
để xử lý sau khi dữ liệu đã được nhận đầy đủ. - Server phản hồi lại dữ liệu nhận được.
Gửi request từ client bằng curl
:
curl -X POST -d "name=John&age=25" http://localhost:3000/submit
Kết quả server trả về:
Dữ liệu nhận được: name=John&age=25
3. Tạo Routing nâng cao với Express
Sử dụng http
để xử lý routing thủ công có thể phức tạp. Thay vào đó, bạn có thể dùng Express.js để tạo route một cách đơn giản hơn.
Cài đặt Express
npm install express
Tạo server với Express
const express = require("express");
const app = express();
// Middleware để parse body của request
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// Route GET /home
app.get("/home", (req, res) => {
res.send("Trang chủ");
});
// Route GET với query string
app.get("/search", (req, res) => {
const keyword = req.query.keyword;
res.send(`Kết quả tìm kiếm cho: ${keyword}`);
});
// Route POST /submit
app.post("/submit", (req, res) => {
res.send(`Dữ liệu nhận được: ${JSON.stringify(req.body)}`);
});
// Khởi động server
app.listen(3000, () => {
console.log("Server đang chạy tại http://localhost:3000");
});
Giải thích:
-
app.get("/home", callback)
: Định nghĩa route/home
. -
req.query
: Lấy query string từ URL. -
app.post("/submit", callback)
: Xử lý request POST và lấy dữ liệu từreq.body
. -
express.json()
giúp parse dữ liệu JSON trong body request.
Test bằng curl
:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":25}' http://localhost:3000/submit
Server trả về:
{"name":"John","age":25}
4. Kết luận
Tính năng | Node.js (http module) | Express.js |
---|---|---|
Tạo route cơ bản | Phải xử lý req.url và req.method thủ công |
Sử dụng app.get() và app.post() đơn giản |
Xử lý query string | Dùng url.parse() để lấy tham số |
Dùng req.query trực tiếp |
Xử lý request body | Phải lắng nghe req.on("data") |
Dùng express.json() để parse body tự động |
Cấu hình dễ dàng | Cần viết nhiều code hơn | Ngắn gọn, dễ sử dụng |
Nếu bạn cần một ứng dụng nhỏ, có thể sử dụng http
module. Nhưng nếu bạn muốn phát triển API hoặc web phức tạp, Express.js là một lựa chọn tối ưu hơn.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com