Routing nâng cao trong Express.js
1. Giới thiệu về Routing nâng cao
Express.js cung cấp khả năng tạo các route cho ứng dụng web với cú pháp rất dễ sử dụng. Bài viết này sẽ giới thiệu cách sử dụng các tham số trong URL (req.params
), truy vấn (req.query
), và dữ liệu gửi từ client (req.body
). Đồng thời, chúng ta sẽ tìm hiểu về middleware trong Express để xử lý các yêu cầu một cách linh hoạt.

2. Sử dụng req.params
, req.query
, req.body
a. req.params
req.params
chứa các tham số được truyền trong URL. Tham số này thường được sử dụng khi định nghĩa route động, chẳng hạn như ID của một bài viết, người dùng, v.v.
Ví dụ:
const express = require('express');
const app = express();
// Route với tham số động
app.get('/user/:id', (req, res) => {
const userId = req.params.id; // Lấy tham số 'id' từ URL
res.send(`Thông tin người dùng có ID: ${userId}`);
});
// Chạy server
app.listen(3000, () => {
console.log('Server đang chạy tại http://localhost:3000');
});
Khi truy cập http://localhost:3000/user/123
, bạn sẽ nhận được phản hồi:
Thông tin người dùng có ID: 123
b. req.query
req.query
chứa các tham số truy vấn (query parameters) trong URL. Tham số này thường được sử dụng trong các tìm kiếm hoặc lọc dữ liệu.
Ví dụ:
const express = require('express');
const app = express();
// Route với query string
app.get('/search', (req, res) => {
const keyword = req.query.keyword; // Lấy tham số 'keyword' từ query string
res.send(`Tìm kiếm với từ khóa: ${keyword}`);
});
// Chạy server
app.listen(3000, () => {
console.log('Server đang chạy tại http://localhost:3000');
});
Khi truy cập http://localhost:3000/search?keyword=nodejs
, bạn sẽ nhận được phản hồi:
Tìm kiếm với từ khóa: nodejs
c. req.body
req.body
chứa dữ liệu được gửi từ client trong các yêu cầu POST, PUT, PATCH. Để sử dụng req.body
, bạn cần cài đặt middleware để phân tích dữ liệu trong request.
Cài đặt middleware để xử lý dữ liệu POST (body-parser)
Đầu tiên, bạn cần cài đặt express.json()
hoặc express.urlencoded()
để xử lý các yêu cầu chứa body.
npm install express
Ví dụ:
const express = require('express');
const app = express();
// Middleware để phân tích dữ liệu JSON trong request body
app.use(express.json());
// Route nhận POST request
app.post('/user', (req, res) => {
const userData = req.body; // Lấy dữ liệu từ body
res.send(`Thông tin người dùng đã nhận: ${JSON.stringify(userData)}`);
});
// Chạy server
app.listen(3000, () => {
console.log('Server đang chạy tại http://localhost:3000');
});
Khi gửi một yêu cầu POST tới http://localhost:3000/user
với body:
{
"name": "Nguyễn Văn A",
"age": 30
}
Bạn sẽ nhận được phản hồi:
Thông tin người dùng đã nhận: {"name":"Nguyễn Văn A","age":30}
3. Middleware trong Express.js
a. Middleware là gì?
Middleware trong Express là các hàm xử lý được chạy trong quá trình tiếp nhận và xử lý request, trước khi gửi response về client. Middleware có thể được sử dụng để:
- Kiểm tra quyền truy cập.
- Phân tích request body.
- Log thông tin.
- Xử lý lỗi.
Middleware có thể được áp dụng toàn cục (cho tất cả các route) hoặc cụ thể cho từng route.
b. Cách sử dụng middleware
Express cung cấp một số cách để sử dụng middleware: toàn cục, theo route, hoặc theo nhóm route.
i. Middleware toàn cục
Middleware toàn cục sẽ được áp dụng cho tất cả các route.
const express = require('express');
const app = express();
// Middleware toàn cục
app.use((req, res, next) => {
console.log(`Yêu cầu đến: ${req.method} ${req.url}`);
next(); // Tiếp tục xử lý request
});
// Route mẫu
app.get('/', (req, res) => {
res.send('Trang chủ');
});
// Chạy server
app.listen(3000, () => {
console.log('Server đang chạy tại http://localhost:3000');
});
Mỗi khi có yêu cầu đến server, middleware này sẽ log thông tin request.
ii. Middleware theo route
Middleware cũng có thể được áp dụng riêng cho từng route.
const express = require('express');
const app = express();
// Middleware chỉ áp dụng cho route '/user'
app.use('/user', (req, res, next) => {
console.log('Đang xử lý route /user');
next();
});
// Route '/user'
app.get('/user', (req, res) => {
res.send('Trang người dùng');
});
// Chạy server
app.listen(3000, () => {
console.log('Server đang chạy tại http://localhost:3000');
});
Khi truy cập http://localhost:3000/user
, bạn sẽ thấy log:
Đang xử lý route /user
iii. Middleware xử lý lỗi
Middleware có thể xử lý lỗi khi xảy ra vấn đề trong quá trình xử lý request.
const express = require('express');
const app = express();
// Route mẫu có lỗi
app.get('/', (req, res) => {
throw new Error('Đã xảy ra lỗi!');
});
// Middleware xử lý lỗi
app.use((err, req, res, next) => {
console.error(err);
res.status(500).send('Đã xảy ra lỗi! Vui lòng thử lại sau.');
});
// Chạy server
app.listen(3000, () => {
console.log('Server đang chạy tại http://localhost:3000');
});
Khi truy cập http://localhost:3000/
, bạn sẽ nhận được phản hồi lỗi:
Đã xảy ra lỗi! Vui lòng thử lại sau.
4. Tổng kết
Khái niệm | Giải thích |
---|---|
req.params |
Lấy các tham số từ URL, ví dụ: /user/:id |
req.query |
Lấy các tham số từ query string trong URL, ví dụ: /search?keyword=nodejs |
req.body |
Lấy dữ liệu từ request body khi gửi yêu cầu POST, PUT |
Middleware | Là các hàm xử lý yêu cầu trước khi gửi response, có thể xử lý xác thực, log, hoặc lỗi |
Với Express.js, việc xử lý routing, tham số trong URL, và middleware trở nên đơn giản và dễ dàng. Bạn có thể linh hoạt kiểm soát và xử lý các yêu cầu đến ứng dụng của mình một cách hiệu quả.

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