「筆記」- 何謂 Middleware?如何幫助我們建立 Express 的應用程式
Express Middleware 類型
Express 的 middleware 種類,大致可以分成五大類:
- Application-level middleware
Application-level middleware 可以被設定去處理每一個應用程式接收到的請求內容,如同前面的應用程式實作,當中所使用的 app.use() 、app.get() 、app.post() 等等,都是 application-level middleware的代表。
// 使用 method-override
app.use(methodOverride('_method'))// 查詢一張 picture 的詳細資料
app.get('/pictures/:id', (req, res) => {
})
2. Router-level middleware
Router-level middleware 是屬於 express.Router() 的實例變數 (instance)的 middleware,使用方法跟 application-level middleware 一樣,範例如下:
// 宣告一個名為 router 的 express.Router() 的實體
const router = express.Router()// 當請求的路由是 GET /todos/:id 時,執行 Router middleware
router.get('/todos/:id', (req, res) => {
// 查詢一個 todo 的詳細資料
})
3. Error-handling middleware
專門來處理錯誤狀況的 middleware,而 Express 的慣例是當一個 middleware 有四個參數時,就代表它是一個 error-handling middleware,所以撰寫 error-handling middleware 時必須提供四個參數,分別為 err、req、res 與 next。
Express 官方文件的範例如下:
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
4. Built-in middleware
Express 當中有幾個內建的 middleware,幫助我們處理一些簡單的事情,如同,透過 express.static(‘public’) 可以讀取,由我們自行建立的靜態檔案,包含 JavaScript 、 CSS 檔案。
app.use(express.static('public'))
5. Third-party middleware
Third-party middleware,則是由第三方所撰寫的套件,它需要透過 npm 下載使用,而 Third-party middleware 最大的好處,就是避免讓我們重複造輪子,可以直接引用他人的模組工具來解決自身的專案問題,如同 body-parser 。
// 載入 body-parser
const bodyParser = require('body-parser')// 使用 body-parser
app.use(bodyParser.urlencoded({
extended: true
}))