var express = require('express')
var app = express()
// 中間件:處理請求的,本質就是個函數
// 在 Express 中,對中間件有幾種分類
// 當請求進來,會從第一個中間件開始進行匹配
// 若是匹配,則進來
// 若是請求進入中間件以後,沒有調用 next 則代碼會停在當前中間件
// 若是調用了 next 則繼續向後找到第一個匹配的中間件
// 若是不匹配,則繼續判斷匹配下一個中間件
//
// 不關心請求路徑和請求方法的中間件
// 也就是說任何請求都會進入這個中間件
// 中間件自己是一個方法,該方法接收三個參數:
// Request 請求對象
// Response 響應對象
// next 下一個中間件
// 當一個請求進入一箇中間件以後,若是不調用 next 則會停留在當前中間件
// 因此 next 是一個方法,用來調用下一個中間件的
// 調用 next 方法也是要匹配的(不是調用緊挨着的那個)
// app.use(function (req, res, next) {
// console.log('1')
// next()
// })
// app.use(function (req, res, next) {
// console.log('2')
// next()
// })
// app.use(function (req, res, next) {
// console.log('3')
// res.send('333 end.')
// })
// app.use(function (req, res, next) {
// console.log(1)
// next()
// })
// app.use('/b', function (req, res, next) {
// console.log('b')
// })
// // 以 /xxx 開頭的路徑中間件
// app.use('/a', function (req, res, next) {
// console.log('a')
// next()
// })
// app.use(function (req, res, next) {
// console.log('2')
// next()
// })
// app.use('/a', function (req, res, next) {
// console.log('a 2')
// })
// 除了以上中間件以外,還有一種最經常使用的
// 嚴格匹配請求方法和請求路徑的中間件
// app.get
// app.post
app.use(function (req, res, next) {
console.log(1)
next()
})
app.get('/abc', function (req, res, next) {
console.log('abc')
next()
})
app.get('/', function (req, res, next) {
console.log('/')
next()
})
app.use(function (req, res, next) {
console.log('haha')
next()
})
app.get('/abc', function (req, res, next) {
console.log('abc 2')
})
app.use(function (req, res, next) {
console.log(2)
next()
})
app.get('/a', function (req, res, next) {
console.log('/a')
})
app.get('/', function (req, res, next) {
console.log('/ 2')
})
// 若是沒有能匹配的中間件,則 Express 會默認輸出:Cannot GET 路徑
app.listen(3000, function () {
console.log('app is running at port 3000.')
})