這部分沒有什么了解,我也是剛學(xué)乘综,引用nswbmw 所著內(nèi)容祭埂,權(quán)當(dāng)一個(gè)Mark。
1. 概念
express 中的中間件(middleware)就是用來處理請求的羔味,當(dāng)一個(gè)中間件處理完河咽,可以通過調(diào)用 next() 傳遞給下一個(gè)中間件,如果沒有調(diào)用 next()赋元,則請求不會往下傳遞忘蟹,如內(nèi)置的 res.render 其實(shí)就是渲染完 html 直接返回給客戶端,沒有調(diào)用 next()搁凸,從而沒有傳遞給下一個(gè)中間件媚值。看個(gè)小例子护糖,修改 index.js 如下:
此時(shí)瀏覽器訪問localhost:3000時(shí)褥芒,終端會輸出:
zhangyanming01
zhangyanming02
通過 app.use 加載中間件,在中間件中通過 next 將請求傳遞到下一個(gè)中間件,next 可接受一個(gè)參數(shù)接收錯誤信息锰扶,如果使用了 next(error)献酗,則會返回錯誤而不會傳遞到下一個(gè)中間件,修改 index.js 如下:
此時(shí)瀏覽器訪問localhost:3000時(shí)坷牛,終端和瀏覽器控制臺都會有錯誤輸出
2. 其他相關(guān)介紹
(1)app.use 有非常靈活的使用方式罕偎,詳情見 官方文檔
express 有成百上千的第三方中間件,在開發(fā)過程中我們首先應(yīng)該去 npm 上尋找是否有類似實(shí)現(xiàn)的中間件京闰,盡量避免造輪子颜及,節(jié)省開發(fā)時(shí)間。下面給出幾個(gè)常用的搜索 npm 模塊的網(wǎng)站:
* http://npmjs.com(npm 官網(wǎng))
* http://node-modules.com
* https://npms.io
* https://nodejsmodules.org
express@4 之前的版本基于 connect 這個(gè)模塊實(shí)現(xiàn)的中間件的架構(gòu)蹂楣,express@4 及以上的版本則移除了對 connect 的依賴自己實(shí)現(xiàn)了俏站,理論上基于 connect 的中間件(通常以 connect- 開頭,如 connect-mongo)仍可結(jié)合 express 使用痊土。
中間件的加載順序很重要乾翔!比如:通常把日志中間件放到比較靠前的位置,后面將會介紹的 connect-flash 中間件是基于 session 的施戴,所以需要在 express-session 后加載反浓。
(2)關(guān)于 express 的錯誤處理,詳情見 官方文檔