Class 06: Middleware, Interceptor, Guard
NestJS là một framework mạnh mẽ của Node.js hỗ trợ nhiều tính năng của kiến trúc ứng dụng backend hiện đại. Ba thành phần quan trọng trong NestJS để kiểm soát luồng xử lý yêu cầu và bảo mật là: Middleware, Interceptor, và Guard.
Middleware là gì? Ứng dụng trong logging và xác thực
Middleware là gì?
Middleware là một hàm được gọi trước khi request được xử lý bởi bất kỳ route handler nào. Có thể dùng để:
Ghi log các request
Kiểm tra token
Chặn IP
Sửa đổi request
Ví dụ: Tạo middleware ghi log request
Áp dụng middleware
Interceptor: response transformation, timeout, logging
Interceptor là gì?
Interceptor là lớp trung gian dùng để can thiệp vào luồng xử lý request và response. Có thể dùng để:
Biến đổi dữ liệu trả về
Thêm timeout cho request
Log thời gian xử lý
Cache
Ví dụ: Interceptor thêm metadata
Áp dụng interceptor toàn cục
Guard: phân quyền, bảo vệ route
Guard là gì?
Guard quyết định có cho phép request đi tiếp hay không, thường dùng cho:
Kiểm tra quyền (role)
Kiểm tra xác thực JWT
Chặn IP
Ví dụ: Guard đơn giản kiểm tra header x-api-key
x-api-key
Áp dụng guard cho controller hoặc method
Thực hành: Tạo Middleware kiểm tra request, Guard chặn IP
Mục tiêu
Middleware kiểm tra nếu header
x-custom-header
không tồn tại thì log cảnh báoGuard chặn truy cập từ IP nằm trong danh sách đen
Bước 1: Middleware kiểm tra header
Bước 2: Guard chặn IP
Bước 3: Sử dụng guard
Bài tập thực hành
Mục tiêu
Thực hành xây dựng Middleware, Interceptor và Guard như sau:
Yêu cầu
Middleware: kiểm tra
x-auth-token
có tồn tại trong header. Nếu không có, log ra cảnh báo.Interceptor: bọc dữ liệu trả về theo định dạng
{ success: true, data: ..., time: ... }
Guard: chặn truy cập từ IP
192.168.0.100
Áp dụng:
Middleware toàn cục
Interceptor toàn cục
Guard cho một route nhất định
Gợi ý test với Postman
Dùng
GET /users/safe
để kiểm tra guard chặn IPDùng
GET /users
không cóx-auth-token
để test middlewareXem định dạng response khi áp dụng Interceptor
Kết luận
Bạn đã học cách:
Viết và dùng Middleware để can thiệp trước xử lý controller
Dùng Interceptor để biến đổi dữ liệu trả về
Tạo Guard để kiểm tra phân quyền, IP hoặc token
Các khái niệm này là nền tảng để bảo mật và kiểm soát request trong ứng dụng NestJS quy mô lớn.
Last updated