Trang chủTác giảLiên hệ

NestJS for Beginners (Part 2)

By Phùng Thế Hoàng
Published in Javascript
August 09, 2021
1 min read

Middleware

Middleware thực chất cũng chỉ là 1 function được gọi trước khi ứng dụng gọi đến route handler (controller). Nói 1 cách dễ hiểu thì middlewares là các hàm được dùng để tiền xử lý, lọc các request trước khi đưa vào controller xử lý logic. Các functions trong middleware có thể truy cập vào đối tượng request, response và gọi next() function để cho phép request đi tiếp. alt text

Middleware trong Nest thì cũng giống như trong ExpressJS, có thể thực hiện các chức năng bao gồm:

  • Thực hiện bất cứ đoạn code nào
  • Thay đổi các đối tượng request và response
  • Kết thúc request-response cycle
  • Gọi hàm middleware tiếp theo trong stack
  • Nếu middleware hiện tại ko kết thúc request-response cycle, nó phải gọi next để sang middleware tiếp theo, nếu ko gọi next thì request sẽ bị treo ở middleware đó.

Trong Nest thì 1 middleware có thể chỉ là 1 function, cũng có thể là 1 class. Nếu là class thì phải implement NestMiddleware interface và phải có @Injectable() decorator. Ok chúng ta thử tạo 1 middleware đơn giản như sau:

Trong ví dụ trên, chúng ta đã thiết lập LoggerMiddleware cho các route handlers của /cats đã được xác định trước đó bên trong CatsController. Chúng ta cũng có thể tiếp tục hạn chế middlewave cho một phương thức yêu cầu cụ thể bằng cách chuyển một đối tượng có chứa path và method đến phương thức forRoutes() khi định cấu hình middlewave.

Chú ý: phương thức configure có thể bất đồng bộ bằng cách sử dụng async/await.

Middleware consumer

Trong phương thức forRoutes chúng ta có thể truyền vào url là 1 hoặc nhiều string như ví dụ trên, hoặc cũng có thể truyền vào 1 hoặc nhiều controller như ví dụ dưới đây (nếu truyền vào nhiều controller thì phải phân cách nhau bởi dấu phẩy):

Ở phương thức apply chúng ta cũng có thể áp dụng nhiều middleware cho 1 route băng cách truyền vào list các middleware (function hoặc class) phân cách nhau bởi dấu phẩy:

Global middleware

Nếu chúng ta muốn đk 1 middleware cho mọi route trong ứng dụng thì sử dung phương thức use() được cung cấp bởi đối tượng INestApplication như dưới đây (nhìn giống expressjs ghê :d):


Phùng Thế Hoàng

Developer

Related Posts

Javascript
SonarQube - Tìm hiểu Rules cho TypeScript - về code thối - phần 4
August 09, 2021
1 min
© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media