VÍ dụ Middleware Express trong NodeJs

VÍ dụ Middleware Express trong NodeJs là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài VÍ dụ Middleware Express trong NodeJs sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và NodeJS nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Trong bài này mình sẽ cùng nhau đi tìm hiểu về middleware trong Express.JS, nhắc đến middleware chắc hẳn cũng đã rất quen thuộc với các bạn đã học lập trình Laravel.

Middleware trong Express cũng tương tự như vậy, nó như một cầu nối liên kết cũng như kết dính các phần với nhau. Nào, bây giờ hãy bắt đầu tìm hiểu đến khái niệm nó là gì đã nhé.

1. Middleware trong Express là gì ?

Middleware là một phần rất quan trọng trong Express nó giúp chúng ta có thể lọc và ngăn chặn các request xấu trong quá trình chạy của ứng dụng. Middleware là các hàm khác nhau được gọi bởi [Route Express] trước khi các yêu cầu (request) hoàn tất.

Các hàm middleware có thê thực thi ở đầu, giữa, hoặc cuối vòng đời của một request. Trong stack các middleware function luôn được thêm vào theo thứ tự mà chúng ta mong muốn ngay ban đầu.

VÍ dụ Middleware Express trong NodeJs

Middleware thường sử dụng để thực hiện các tác vụ như: parseJSON, parseCookie, kiểm tra đăng nhập, thậm chí còn được sử dụng để viết các module một cách nhanh chóng.

2. Middleware Function trong Expresss

Các middlware function là các hàm có quyền truy cập vào các đối tượng như request(req), respone(res), next() trong chu kì của ứng dụng. next() là một hàm trong Route Express, khi được gọi hàm next() sẽ thực thi các middleware tiếp theo. Các middle function có thể thực hiện các chức năng như:

  • Thay đổi các đối tượng như request(req), respone(res)
  • Kết thúc vòng đời của một request.
  • Gọi các middleware sau trong stack

Chúng ta cùng nhau đi vào tìm hiểu các ví dụ thực tế bên dưới để có thể hình dung rõ hơn việc sử dụng middleware trong dự án thực tế nhé !

Khởi tạo một middleware function

Để khởi tạo middleware function chúng ta sử dụng :

//middleware function
var myLogger = function(req, res, next) {
  console.log("Middleware")
  next()
}
//Khai bao su dung middleware
app.use(myLogger)   

Khi khởi tạo middleware bằng cách này thì bất cứ các request nào được gửi đến sẽ phải thông qua middleware, chúng ta hãy đi vào khởi tạo một app nhỏ trong đó sử dụng middleware để hiểu rõ hơn nhé !

Ví dụ về sử dụng middleware function

Chúng ta tạo 1 app nhỏ có chức năng kiểm tra đường dẫn và method của request gửi đến và dùng middleware để chặn request.

Tạo thư mục có tên middleware mở terminal và chạy dòng lệnh bên dưới để cài đặt express :

  npm install --save express 

Trong thư mục middleware tạo file có tên index.js có các phần sau :

Khai báo sử dụng express và khởi tạo app

  const express = require('express')  
const app = express() 

Tạo middleware kiểm tra đường dẫn và method của request

//Middleware function kiểm tra request
var checkRequest = (req, res, next) => {
    console.log('Middleware chạy ở route có url ' + req.url + ' và method là ' + req.method )
    if (req.url === '/block') {
        res.send('Bạn không có quyền truy cập !')
    }else{
        next()
    }
}
//Khai báo sử dụng middleware
app.use(checkRequest)
//Khởi tạo route mới 

TIếp theo chúng ta sẽ khởi tạo các route để cho người dùng truy cập

app.get('/', function (req, res) {
  res.send('Truy cập thành công !')
})
app.get('/home', function (req, res) {
  res.send('Truy cập thành công !')
})
app.get('/block', function (req, res) {
  res.send('Truy cập thành công !')
})
//Sử dụng port 3000 
app.listen(3000) 

Cuối cùng file index.js sẽ có nội dung đầy đủ như sau :

const express = require('express')
const app = express()
//Middleware function kiểm tra request
var checkRequest = (req, res, next) => {
    console.log('Middleware chạy ở route có url ' + req.url + ' và method là ' + req.method )
    if (req.url === '/block') {
        res.send('Bạn không có quyền truy cập !')
    }else{
        next()
    }
}
//Khai báo sử dụng middleware
app.use(checkRequest)
//Khởi tạo route mới
 
app.get('/', function (req, res) {
  res.send('Truy cập thành công / !')
})
app.get('/home', function (req, res) {
  res.send('Truy cập thành công home!')
})
app.get('/block', function (req, res) {
  res.send('Truy cập thành công block !')
})
 
//Sử dụng port 3000 
app.listen(3000) 

Mở terminal và sử dụng dòng lệnh sau để chạy app

  node index.js 

Khi truy cập đường dẫn localhost:3000/block thì bạn sẽ nhận được thông báo "bạn không có quyền truy cập" mặc dù trong route bạn đã khai báo response về giá trị 'Truy cập thành công block !'. Lý do bởi khi middleware được chạy ở ở đầu vòng đời của request nên nó đã kiểm tra giá trị và response lại trước khi route response. Bạn có thể chạy và xem kết quả để hiểu rõ hơn nhé !

3. Các loại middleware trong Express

Chúng ta có thể chia middleware ra nhiều kiểu khác nhau và sử dụng nó vào từng trường hợp cụ thể của nó. Dưới đây là một số các kiểu middleware được express cung cấp cho chúng ta.

Application-level middleware

Chúng ta có thể khai báo middleware bằng cách thêm nó vào các hàm như app.use(), app.GET(), app.POST(), app.PUT(),..

Khi middleware được khai bái bằng app.use() như trong ví dụ trên tất cả các các request đều phải đi qua middleware function :

var app = express()
 
app.use(function (req, res, next) {
  console.log('Receive all request')
  next()
}) 

Khi middleware được khai báo bằng cách sử dụng các route thì nó chỉ các request trong route đó mới thông qua middleware function :

app.get('/user/:id', function (req, res, next) {
  console.log('ID:', req.params.id)
  next()
}, function (req, res, next) {
  res.send('User Info')
}) 

Router-level middleware

Chúng ta cũng có thể sử dụng middleware trong phạm vi Router, cách thức hoạt động giống như trong Application-level middleware nhưng nó phu thuộc vào biến express.Router()

  var router = express.Router()   

Ví dụ bên dưới thể hiện rất rõ điều đó :

var app = express()
var router = express.Router()
 
router.use(function (req, res, next) {
  console.log('middleware run')
  next()
})
 
router.get('/', function (req, res) {
  res.send('hello, user!')
}) 

Error-handling middleware

Thay vì truyền 3 tham số vào hàm middleware như các ví dụ ở trên, bạn nên bắt lỗi middleware bằng cách truyền vào nó 4 tham số, tham số đầu tiền sẽ là biến nhận kết quả lỗi của middleware.

app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
}) 

Third-party middleware

Bạn cũng có thể sử dụng các middleware bên thứ 3 để có thể mở rộng dự án của mình một cách dễ dàng hơn, sử dụng công cụ npm để cài đặt và đưa nó vào trong dự án của bạn. Ví dụ sau mình sẽ cài 1 middleware hỗ trợ có tên là cookie-parser , nó cho phép chúng ta làm việc với cookie dễ dàng hơn trong Express. Mở terminal và gõ dòng lênh sau :

  npm install --save cookie-parse 

Thêm middleware này vào trong dự án của bạn

 var express = require('express')
var app = express()
var cookieParser = require('cookie-parser')
 
// load the cookie-parsing middleware
app.use(cookieParser())

Trên đây là những kiến thức cơ bản cũng như đầy đủ về middleware trong Express, rất mong những phần mình vừa chia sẻ sẽ giúp ích bạn trong quá trình lập trình với NodeJS nói chung và sử dụng Express Framework nói riêng :))

Hy vọng với bài viết về VÍ dụ Middleware Express trong NodeJs đã giải đáp giúp bạn phần nào về kiến thức lập trình NodeJS. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!