Middleware trong Expressjs

Chào các bạn, hôm nay mình sẽ trình bày về một đối tượng khá phổ biến trong lập trình, đó là middleware. Và tất nhiên, mình sẽ không đi lan man về nó, mà chỉ tập trung cụ thể vào middleware trong lập trình web, mà đặc biệt là trong module express của nodejs. Chúng ta bắt đầu nào!

Tổng quan về middleware

Mỗi một lần các bạn thao tác trên một website, như là truy cập url của web, submit form, … thì  sẽ đều tạo ra một chu kỳ xử lý theo mô hình nhận yêu cầu sau đó trả lại một kết quả, từ phía client (tức là browser) rồi đến server sau đó lại quay trở lại client. Khi đó, việc xử lý các yêu cầu rồi thì sẽ trả lại các kết quả đó được gọi là các middleware.

Vậy các middleware là các chức năng (hàm) có quyền truy cập và tác động tới đối tượng yêu cầu (req) , đối tượng phản hồi (res) , và middleware tiếp theo trong chu kỳ phản hồi yêu cầu của ứng dụng. Các chức năng này được sử dụng để sửa đổi các đối tượng req và res cho các tác vụ như phân tích cú pháp các khối yêu cầu, thêm các tiêu đề đáp ứng, …

Dưới đây là một ví dụ đơn giản về một middleware:

Giả sử bạn có một file app.js với nội dung như trên, và chạy nó để tạo server web. Thì bất kỳ một truy cập hay yêu cầu nào đến sẽ đều xuất ra thời gian nhận được yêu cầu tại màn hình cmd, giống như là:

Lúc này, hàm

chính là một middleware. Trong đó, hàm console.log("...") là công việc xử lý trong middleware này. Sau đó chúng ta gọi hàm next(), hàm này có nhiệm vụ cho server biết rằng đây chưa phải là middleware cuối cùng trong chu kỳ xử lý yêu cầu này, và chuyển đến middleware tiếp theo.

Middleware trong express

Một middleware trong express sẽ là một hàm có dạng:

Đó là một hàm sẽ được truyền vào các tham số là request, response, next mà trong đó:

  • request – Biểu diễn một HTTP request và có các thuộc tính cho các request như các chuỗi truy vấn, tham số, body, HTTP header và những phần khác.
  • response – Biểu diễn một HTTP response được ứng dụng Express gửi đi khi nó nhận về một HTTP request.
  • next – Là 1 HÀM – (hàm nhé), bạn hãy call nó khi muốn thông báo middleware này đã xử lý xong, middleware tiếp theo hãy tiến hành xử lý.

Do đó, chúng ta có thể thấy rằng, việc xử lý một yêu cầu đến từ máy khách và để sau đó trả lại kết quả mong muốn, có thể được phân thành nhiều giai đoạn xử lý, và một giai đoạn xử lý đó chính là một middleware. Đó chính là một công việc mà chúng ta luôn mong muốn làm được để xử lý một yêu cầu đối với một đường dẫn cụ thể (gọi là route). Ví dụ như bạn có một yêu cầu từ đường dẫn /hello , và bạn mong muốn rằng sẽ chia ra các công đoạn xử lý như sau:

  1. Tại thời điểm bắt đầu nhận được yêu cầu này, chúng ta sẽ xuất ra thời gian nhận được yêu cầu.
  2. Tiếp theo là yêu cầu hiển thị nội dung trang hello, tương ứng với đường dẫn là /hello.

Khi đó file app.js của chúng ta có thể có nội dung như sau:

Lúc này, sau khi khởi chạy ứng dụng, các bạn truy cập vào với đường dẫn là /hello, ở đây mình chạy trên localhost thì đường dẫn sẽ là: http://localhost/hello, thì các bạn sẽ thấy hiển thị trên trình duyệt là dòng chữ Xin chào! Yêu cầu đã được nhận vào lúc 1515676564207, và trong cửa sổ cmd sẽ hiển thị dòng:

Các bạn thấy đấy, tại cửa sổ cmd đã log trước lúc xuất ra trình duyệt là 3 mili giây.

Tóm lại, các chức năng hay hàm mà có nhiệm vụ xử lý các yêu cầu nhận vào nhằm mục đích trả lại kết quả hồi đáp được gọi là middleware. Các middleware có thể là các hàm do chính bạn định nghĩa trực tiếp, giống như các ví dụ trên, hoặc là các hàm hay chức năng được cung cấp bởi bên thứ ba (tức là một hàm hay chức năng được xây dựng sẵn và bạn chỉ việc đưa nó vào sử dụng). Một danh sách các middleware của bên thứ ba được đề cập đến tại đây.

Cám ơn các bạn đã đọc hết bài viết!

Bài viết không tránh khỏi những sai sót. Rất vui nếu nhận được sự góp ý của các bạn.

Sharing is caring!

Chủ đề:

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *