前言
這一篇將要來講一個很重要的東西,也就是 middleware,又稱中介軟體、中間組件等等,那在 Express 開發上其實是非常常見的
middleware
通常 middleware 很常見於登入守衛 (守門員、導航守衛等),那該如何使用呢?這邊會使用的是 router.use
語法,讓我們來看看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| var express = require('express'); var router = express(); var port = 8080;
router.get('/', function(req, res) { res.send('HelloWorld'); })
router.get('/admin', function(req, res) { res.send('Hello Admin!'); })
router.use(function(req,res,next) { console.log('有人進入 USER頁面'); next(); })
router.get('/user', function(req, res) { res.send('Hello User!'); })
router.listen(port, function() { console.log('已開啟 port: ' + port); })
|
這時候我們可以在瀏覽器上輸入 http://localhost:8080/user/
,你會在終端機上看到提示訊息
![有人進入 USER頁面]()
由此可知我們可以在 router.use
裡面做一些判定,當然我們可以進階一點的做法,如果今天使用者輸入的頁面不存在呢?一樣是使用 router.use
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| var express = require('express'); var router = express(); var port = 8080;
router.get('/' ,function(req, res) { res.send('HelloWorld'); })
router.get('/admin', function(req, res) { res.send('Hello Admin!'); })
router.get('/user', function(req, res) { res.send('Hello User!'); })
router.use(function(req,res,next){ res.status(404); res.send('404 畫面'); })
router.listen(port, function() { console.log('已開啟 port: ' + port); })
|
這時候我們隨便輸入一個沒有的 router,那麼你就會得到一個 404 頁面
![404]()
那如果是程式碼錯誤呢?程式碼錯誤當然不可以給使用者看到這個畫面
![ReferenceError]()
一樣也是使用 router.use
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| var express = require('express'); var router = express(); var port = 8080;
router.get('/' ,function(req, res) { qq(); res.send('HelloWorld'); })
router.get('/admin', function(req, res) { res.send('Hello Admin!'); })
router.get('/user', function(req, res) { res.send('Hello User!'); })
router.use(function(req,res,next){ res.status(404); res.send('404 畫面'); })
router.use(function(err,req,res,next) { res.status(500); res.send('程式碼出現錯誤'); })
router.listen(port, function() { console.log('已開啟 port: ' + port); })
|
這樣當程式碼錯誤的時候,就不會出現錯誤訊息哩
![程式碼出現錯誤]()
但是一般來講開發下最好要開啟錯誤訊息,否則你會很難 debug
補充 middleware 其他寫法
如果我們有一個驗證會不停地重複使用,那麼就可以用這種寫法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| var express = require('express'); var router = express(); var port = 8080;
var login = function(req, res, next) { console.log('驗證成功') next(); }
router.get('/',login ,function(req, res) { res.send('HelloWorld'); })
router.get('/admin',login ,function(req, res) { res.send('Hello Admin!'); })
router.get('/user', function(req, res) { res.send('Hello User!'); })
router.use(function(req,res,next){ res.status(404); res.send('404 畫面'); })
router.use(function(err,req,res,next) { res.status(500); res.send('程式碼出現錯誤'); })
router.listen(port, function() { console.log('已開啟 port: ' + port); })
|
![驗證成功]()