Middleware trong Express.js: Xử lý Yêu cầu Trung gian

Giới thiệu về Middleware trong Express.js

Middleware trong Express.js là một khái niệm mạnh mẽ cho phép bạn thực hiện các chức năng theo một thứ tự cụ thể trong suốt vòng đời yêu cầu-phản hồi. Những chức năng này có thể thực hiện các nhiệm vụ khác nhau như xác thực, ghi log, xác minh dữ liệu và nhiều hơn nữa. Các chức năng middleware được thực thi theo thứ tự tuần tự và mỗi middleware có quyền truy cập vào các đối tượng requestresponse, cũng như hàm next, chuyển quyền kiểm soát cho middleware tiếp theo trong ngăn xếp.

Tại sao sử dụng Middleware?

Middleware là rất quan trọng để tạo mô-đun chức năng cho ứng dụng của bạn và nâng cao khả năng bảo trì của nó. Nó cho phép bạn giữ cho các xử lý tuyến đường sạch sẽ và tập trung vào các nhiệm vụ cụ thể trong khi chuyển gánh nặng các vấn đề thông thường hoặc liên quan chung cho các chức năng middleware. Sự tách biệt về quan điểm này tạo điều kiện cho việc tái sử dụng mã và làm cho nguồn mã của bạn trở nên có tổ chức hơn.

Tạo và Sử dụng Middleware

Để tạo middleware trong Express.js, bạn định nghĩa một hàm có ba tham số: request, responsenext.

Dưới đây là một ví dụ cơ bản về middleware ghi log cho mỗi yêu cầu đến:

const logMiddleware = (req, res, next) => {
  console.log(`Nhận yêu cầu ${req.method} tại ${req.url}`);
  next(); // Chuyển quyền kiểm soát cho middleware tiếp theo
};

app.use(logMiddleware);

Bạn có thể sử dụng phương thức app.use() để áp dụng middleware toàn cục cho tất cả các tuyến đường, hoặc bạn có thể sử dụng nó một cách có chọn lọc cho các tuyến đường cụ thể.

Thứ Tự Thực Hiện Middleware

Các chức năng middleware được thực thi theo thứ tự chúng được định nghĩa bằng cách sử dụng app.use().

Ví dụ:

app.use(middleware1);
app.use(middleware2);

Trong trường hợp này, middleware1 sẽ được thực hiện trước middleware2 cho tất cả các yêu cầu đến.

Xử Lý Lỗi trong Middleware

Nếu xảy ra lỗi trong chức năng middleware, bạn có thể chuyển lỗi đến hàm next, và Express.js sẽ tự động chuyển tới middleware xử lý lỗi.

Dưới đây là một ví dụ:

const errorMiddleware = (err, req, res, next) => {
  console.error(err);
  res.status(500).send('Đã xảy ra lỗi gì đó!');
};

app.use(errorMiddleware);

Sử Dụng Middleware cho Xác Thực

Middleware thường được sử dụng để thực hiện xác thực và ủy quyền trong các ứng dụng web. Ví dụ, bạn có thể tạo một chức năng middleware kiểm tra xem người dùng đã xác thực hay chưa trước khi cho phép truy cập vào các tuyến đường cụ thể:

const authenticateMiddleware = (req, res, next) => {
  if (req.isAuthenticated()) {
    return next(); // Người dùng đã xác thực, tiếp tục tới middleware tiếp theo
  }
  res.redirect('/login'); // Người dùng chưa xác thực, chuyển hướng đến trang đăng nhập
};

app.get('/profile', authenticateMiddleware, (req, res) => {
  res.send('Chào mừng bạn đến trang hồ sơ!');
});

 

Kết Luận

Middleware trong Express.js là một công cụ quan trọng để quản lý và nâng cao chức năng của ứng dụng web của bạn. Bằng cách tạo chức năng middleware có thể tái sử dụng, bạn có thể tối ưu mã, phân mô-đun các vấn đề và nâng cao khả năng bảo trì chung của dự án. Từ việc xử lý xác thực đến ghi log và quản lý lỗi, middleware giúp bạn xây dựng ứng dụng web mạnh mẽ và an toàn một cách hiệu quả.