koa中介軟體的的執行順序是洋蔥模型,外層逐步向內,執行到最中間再逐步向外擴充套件,實現這個順序的模型需要依賴於generator函式,它可以暫停執行將控制權交出,等到執行next再得到執行權繼續執行,我們需要做的就是將generator串聯起來,將後面的generator函式跟在上一層函式的yield語句之後,可以看作後面的函式是next的引數,這樣我們就形成了乙個串聯,它的執行順序就是我們前面所提到的洋蔥模型。
在koa中,實現上面所說的串聯函式就是利用了compose,下面是compose的大概實現(在koa中叫koa-compose):
function compose (middlewares) ();
while (i--)
return next;
}}
在koa的原始碼中有這樣的**:
var fn = this.experimntal
? compose_es7(this.middleware)
: co.wrap(compose(this.middleware));
//達到了洋蔥模型的效果
function *()
上面我們看到通過使用koa-compose將中介軟體聯絡在一起(串聯),可是在koa中需要呼叫next()方法才可以驅動函式向下執行。這時候就需要用到co模組。它可以幫我們自動管理generator的next,並根據呼叫返回value做出不同的響應;如果遇到另外乙個generator,co會繼續呼叫自己,這就是我們為什麼需要co。
簡單實現原理:
function run (gen) else
function next () else if (typeof g.next === 'function')
} next();
}
通過遞迴的方式(判斷是否執行結束),來驅動generator的執行。
關於co模組的補充(es6)
koa 中介軟體
什麼是中介軟體 中介軟體是匹配路由之前或匹配路由完成做的一系列操作 中介軟體是乙個函式,它可以訪問請求物件和響應物件,和web應用中處理請求 響應迴圈流程 變數next,呼叫它,將控制權交給下乙個中介軟體函式 中介軟體的功能 koa中的幾種中介軟體 應用級中介軟體 路由級中介軟體 錯誤處理中介軟體 ...
koa 中介軟體
什麼是 koa 的中介軟體 通俗的講 中介軟體就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以 把它叫做中介軟體。在express中介軟體 middleware 是乙個函式,它可以訪問請求物件 requestobject req 響應物件 responseobject res 和 web...
koa 中介軟體
中介軟體就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以把它叫做中介軟體。在express 中介軟體 middleware 是乙個函式,它可以訪問請求物件 request object req 響應物件 response object res 和web 應用中處理請求 響應迴圈流程中的中...