Express - Middleware
Middleware 是會處理 req, res, next 三個物件並在 routing 時執行之 function,基本上就是 routing 時會處理的 callback function。是 Express 中蠻重要的概念。但用例子來理解比較容易。 import express from 'express'
// 建立 express 這 module
var app = express()
const port = 8888
var userName = "Unknown"
function hello(req, res) {
res.send("Hello " + userName + "\n")
res.end()
}
// 中間的匿名 function 就是 Middleware
app.get('/hello/:userName.:userPassword', function (req, res, next){
userName = req.params.userName
console.log(userName)
next()
}, hello)
app.listen(8888)
所以 Express 可以用這些 Middleware 來作到流程控制,而非使用傳統的 if else。
Express - Middleware Using
Middleware 除了自己塞也可以有 2 種 Express 提供的方式使用。- Application-level
import express from 'express' // 建立 express 這 module var app = express() const port = 8888 function reqType (req, res, next){ console.log('Request Type:', req.method) next() } function timer (req, res, next){ var date = new Date() console.log('Time:', date.toString()) if (req.params.userName == "Admin") { next('route') // 只能在 app.Method() 使用,在 use() 裡就會只是普通的 next() } else { next() } } function logger (req, res, next){ console.log ( 'User Date:', '\n', 'User:', req.params.userName, '\n', 'Password:', req.params.userPassword, '\n' ) res.end() } function warning(req, res, next) { console.log("Warning: Your village is under attack\n") res.end() } // app.use() 在 route 之前,所以會先執行 use 裡的 Middleware function // 之後在依照 Request Method 去找相對的 app.Method() 做 Reuest Handle app.use('/hello/:userName.:userPassword', reqType) // 正常來講,若 Request 是 GET 且 URL 符合的話,會依照順序執行 routing function // 但 timer 裡有 next('route'),符合條件的話會直接把控制權交給下個 routing function, // 忽略它本身後面的 Middleware function,這裡就是 logger。 app.get('/hello/:userName.:userPassword', timer, logger) app.get('/hello/:userName.:userPassword', warning) app.listen(8888)
- Router-level
使用方法跟 app (express()) 一模一樣,差把 app 改成 router (express.Router())
上一篇 :
下一篇 :
參考資料 :
1. Express 官網
0 意見:
張貼留言