上面的1、2、3、4順序即為開發者註冊時的順序(故我們平時在開發時express註冊中間件時是有先後順序的)。express最主管理與運行中間件的能力,接下來深入內部看看connect這個中間件機制是怎麼實現的。
不難看出,app.use中間件時,只是把它放入一個數組中。當http請求時,app會從數組中逐個取出,進行匹配過濾,逐個運行。遍歷完成後,運行finalhandler,結束一個http請求。可以從http請求的角度思考,一次請求它經歷經歷了多少東西。express的這個中間件架構就是負責管理與調用這些註冊的中間件。中間件順序執行,通過next來繼續下一個,一旦沒有繼續next,則流程結束。
為了用串列化流程式控制制讓幾個非同步任務按順序執行,需要先把這些任務按預期的執行順序放 到一個數組中。如圖,所示,這個數組將起到隊列的作用:完成一個任務後按順序從數組中取 出下一個