Sử dụng middleware trong express

Một phần của tài liệu Giáo trình môn học phát triển mã nguồn mở với NodeJS (ngànhnghề thiết kế trang web) (Trang 36 - 40)

7. Express Framework

7.5.4 Sử dụng middleware trong express

Sử dụng middleware ở cấp ứng dụng

Khi bạn khởi tạo một ứng dụng Web với Express một đối tượng đại diện cho ứng

dụng của chúng ta đó là app (tùi theo mỗi người mà tên đối tượng này có thể sẽ

khác). Chúng ta có thể sử dụng đối tượng này để khai báo middleware thông qua các hàm app.use() hoặc app.METHOD METHOD ở đây chính là các phương thức của request .

Ví dụ với middleware khi không có đường dẫn. Với kiểu khai báo như thế này thì mỗi khi có yêu cầu tới middleware sẽ được thực thi.

File server.js

var express = require('express'); var app = express();

app.use(function(request, response, next){ console.log('Time:' + Date.now()) next();

});

app.get('/', function(request, response){

response.send('Chào mừng các bạn đến với học viện công nghệ VietPro');

});

app.listen(3000)

Ví dụ này sẽ gắn một middleware vào đường dẫn /user/:id . Middleware sẽ được

thực thi khi có một yêu cầu truy cập vào /user/:id

File server.js

var express = require('express'); var app = express();

app.use('/user/:id', function(request, response, next){ console.log('Time:' + Date.now())

next(); });

Phạm Đình Nam –Trường Caođẳng nghề Đà Lạt Trang 35 app.get('/*', function(request, response){

response.send('Chào mừng các bạn đến với học viện công nghệ VietPro');

});

app.listen(3000)

Ví dụ khi một người dùng truy cập đường dẫn bằng phương thức GET.

File server.js

var express = require('express'); var app = express();

app.get('/user/:id', function(request, response, next){

response.send('Chào mừng các bạn đến với học viện công nghệ VietPro');

});

app.listen(3000)

Khi chúng ta muốn khai báo một lúc nhiều middleware cho một đường dẫn, các bạn có thể viết liên tiếp nhiều hàm là các tham số phía sau tham số đường dẫn.

app.use('/user/:id', function (req, res, next) { console.log('Request URL:', req.originalUrl) next()

}, function (req, res, next) {

console.log('Request Type:', req.method) next()

})

Trong trường hợp các bạn có nhiều router được xác định cho một đường dẫn. Ví dụ

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

Phạm Đình Nam –Trường Caođẳng nghề Đà Lạt Trang 36 })

Trong trường hợp trên khi một client truy cập vào /user/:id thì phía express sẽ tự

động đẩy vào User Info và không thể nào chuyển tiếp tới req.params.id . Để có thể

chuyển tiếp tới req.params.id thì ở hàm next() chúng ta phải khai báo thêm tham

số 'router' thì nó sẽ tự động chuyển về router cuối cùng trong danh sách router

Ví dụ dưới đây mô tả trường hợp khi truy cập vào đường dẫn /user/:id với id

khác 0 thì sẽ chuyển tới req.params.id

File server.js

var express = require('express'); var app = express();

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

if (req.params.id == 0) { next('router');

} else next()

}, function (req, res, next) { res.send('User Info') })

app.get('/user/:id', function (req, res, next) { res.end(req.params.id)

})

app.listen(3000)

Sử dụng middleware ở cấp Router

Các middleware của Router về cách thức hoạt động không khác gì so với middleware cấp ứng dụng. Nhưng thay vì sử dụng đối tượng đại diện cho ứng dụng, chúng ta sẽ sử dụng thể hiện của Router.

var router = express.Router()

ở trong đối tượng router cũng có những phương thức tương tự như ở trong đối

tượng app của ứng dụng. Bao gồm router.use() và router.METHOD .

Ví dụ:

File server.js

Phạm Đình Nam –Trường Caođẳng nghề Đà Lạt Trang 37 var app = express();

var router = express.Router();

router.use('/user/:id', function(request, response, next){ console.log('Time: ' + Date.now());

next(); });

router.get('/user/:id', function(request, response, next){

response.send('Chào mừng các bạn đến với học viện công nghệ VietPro');

});

app.use(router) app.listen(3000)

Sử dụng middleware xử lý lỗi

Một trong những điều quan trọng nhất trong xây dựng web là xử lý lỗi. Vì hệ thông sẽ phụ thuộc vào các dịch vụ , cơ sở dữ liệu khác, cũng như người sử dụng dịch vụ đó. Cơ sở dữ liệu không kết nối được, dịch vụ sẽ không hoạt động và người dùng sẽ không thể nào truy cập tới được các đường dẫn của chúng ta.

Để phòng chống những tính huống như vậy bạn phải xử lý các lỗi đúng cách. Trước khi đi vào ví dụ đơn giản về xử lý lỗi thì chúng ta cùng xem cú pháp khai báo một middleware xử lý lỗi trong expres.

Cú pháp

app.use(function(error, request, response, next){ })

Như các bạn thấy thì middleware xử lý lỗi thì chúng ta sẽ có thêm 1 tham số đó là error. Chính là đối tượng chứa thông báo lỗi của chúng ta.

Ví dụ thông báo lỗi đơn giản. File server.js

var express = require('express'); var app = express();

app.get('/user/:id', function(request, response, next){ if (request.params.id == 0) {

var error = {

title: "Không tìm thấy ID", httpStatusCode: 400

Phạm Đình Nam –Trường Caođẳng nghề Đà Lạt Trang 38 } return next(error); } response.end(request.params.id); });

app.use(function(error, request, response, next){

response.status(error.httpStatusCode).send(error.title) })

app.listen(3000)

Trong ví dụ trên tôi viết ra một middleware xử lý lỗi đơn giản. Ở trong router /user/:id tôi viết đoạn code đơn giản để kiểm tra tham số id bằng 0 thì tạo ra một đối tượng chứa thông tin lỗi sau đó tiến hành chuyển tiếp thông tin lỗi đến middleware xử lý lỗi để tiếp tục xử lý.

Để chạy thửví dụ các bạn chạy command với lệnh

node server

Sử dụng middleware tích hợp

Middleware tích hợp là các middleware đã được cài đặt sẵn ở trong đối tượng express.

Express có các midleware tích hợp sau:

express.static: dùng để sử dụng các tập tin tĩnh như các tập tin css, javascript hay image

express.json:phân tích các yêu cầu gửi lên bằng JSON

express.urlencode: phân tích các yêu cầu của được mã hóa theo url.

Sử dụng middleware của bên thứ ba

Ngoài những middleware các bạn tự xây dụng hay các middleware tích hợp sẵn

các bạn có thể cài các middleware của các bên thứ 3 ở trên kho NPM.

Một phần của tài liệu Giáo trình môn học phát triển mã nguồn mở với NodeJS (ngànhnghề thiết kế trang web) (Trang 36 - 40)

Tải bản đầy đủ (PDF)

(72 trang)