Middleware là một khái niệm quan trọng trong Node.js và được sử dụng rộng rãi trong phát triển ứng dụng web. Nó giúp xử lý các yêu cầu HTTP trước khi chúng đến đích cuối cùng. Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo và sử dụng middleware trong Node.js.
Khái niệm về Middleware
Middleware là một hàm được thực thi giữa quá trình xử lý yêu cầu và phản hồi trong ứng dụng web Node.js. Nó có thể thực hiện một số công việc như xác thực người dùng, ghi lại nhật ký, xử lý lỗi, xác định quyền truy cập, nén dữ liệu, và nhiều công việc khác. Mỗi middleware có thể tiếp tục chuyển tiếp yêu cầu cho middleware tiếp theo hoặc kết thúc quá trình xử lý bằng cách trả về phản hồi.
Tạo Middleware trong Node.js
Để tạo middleware trong Node.js, chúng ta sử dụng một hàm có ba tham số: request
, response
, và next
. Dưới đây là một ví dụ về cách tạo một middleware đơn giản để ghi lại nhật ký:
const loggerMiddleware = (req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next(); // Chuyển tiếp yêu cầu cho middleware tiếp theo
};
Trong ví dụ trên, loggerMiddleware
là một hàm middleware nhận vào ba tham số req
, res
, và next
. Hàm này ghi lại thông tin về yêu cầu gửi đến máy chủ, bao gồm thời gian, phương thức và URL. Sau đó, nó gọi next()
để chuyển tiếp yêu cầu cho middleware tiếp theo trong chuỗi middleware.
Sử dụng Middleware trong Node.js
Để sử dụng middleware trong ứng dụng Node.js, chúng ta sử dụng phương thức app.use()
của framework Express.js. Dưới đây là một ví dụ về cách sử dụng middleware để xác thực người dùng:
const express = require('express');
const app = express();
// Middleware xác thực người dùng
const authMiddleware = (req, res, next) => {
if (req.headers.authorization === '123456') {
next(); // Chuyển tiếp yêu cầu cho middleware tiếp theo
} else {
res.status(401).send('Unauthorized');
}
};
// Sử dụng middleware xác thực người dùng cho tất cả các route
app.use(authMiddleware);
// Các route trong ứng dụng
app.get('/home', (req, res) => {
res.send('Welcome to the home page!');
});
app.get('/profile', (req, res) => {
res.send('Welcome to your profile!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Trong ví dụ trên, chúng ta đã tạo một middleware authMiddleware
để xác thực người dùng. Nếu yêu cầu có tiêu đề Authorization
với giá trị là 123456
, yêu cầu được chuyển tiếp cho middleware tiếp theo. Nếu không, một phản hồi lỗi 401 “Unauthorized” được gửi về client. Chúng ta đã sử dụng app.use()
để áp dụng middleware cho tất cả các route trong ứng dụng.
Middleware chuỗi và Middleware định tuyến
Trong Node.js, chúng ta có thể xây dựng một chuỗi middleware bằng cách liên kết các middleware lại với nhau. Mỗi middleware trong chuỗi có thể thực hiện công việc riêng biệt và chuyển tiếp yêu cầu cho middleware tiếp theo. Điều này cho phép chúng ta xây dựng các quy trình xử lý phức tạp hơn và tăng khả năng mở rộng của ứng dụng.
Ngoài ra, Express.js cung cấp khả năng sử dụng middleware định tuyến (route-specific middleware) để áp dụng middleware cho các route cụ thể. Điều này cho phép chúng ta chỉ áp dụng middleware cho các route mong muốn và giữ code sạch sẽ và có tổ chức.
Middleware là một khái niệm quan trọng trong phát triển ứng dụng web Node.js. Nó cho phép chúng ta xử lý yêu cầu trước khi chúng đến đích cuối cùng và thực hiện các công việc như xác thực, ghi nhật ký, xử lý lỗi và nén dữ liệu. Bằng cách sử dụng các middleware, chúng ta có thể xây dựng ứng dụng Node.js linh hoạt và dễ bảo trì.