nodejs-koa框架的中介軟體級聯
阿新 • • 發佈:2019-01-27
Koa 的中介軟體通過一種更加傳統(您也許會很熟悉)的方式進行級聯,摒棄了以往 node 頻繁的回撥函式造成的複雜程式碼邏輯。 我們通過 generators 來實現“真正”的中介軟體。 Connect 簡單地將控制權交給一系列函式來處理,直到函式返回。 與之不同,當執行到 yield next 語句時,Koa 暫停了該中介軟體,繼續執行下一個符合請求的中介軟體('downstrem'),然後控制權再逐級返回給上層中介軟體('upstream')。
下面的例子在頁面中返回 "Hello World",然而當請求開始時,請求先經過 x-response-time 和 logging 中介軟體,並記錄中介軟體執行起始時間。 然後將控制權交給 reponse 中介軟體。當中間件執行到 yield next 時,函式掛起並將控制前交給下一個中介軟體。當沒有中介軟體執行 yield next 時,程式棧會逆序喚起被掛起的中介軟體來執行接下來的程式碼。
var koa = require('koa'); var app = koa(); // x-response-time app.use(function *(next){ var start = new Date; yield next; var ms = new Date - start; this.set('X-Response-Time', ms + 'ms'); }); // logger app.use(function *(next){ var start = new Date; yield next; var ms = new Date - start; console.log('%s %s - %s', this.method, this.url, ms); }); // response app.use(function *(){ this.body = 'Hello World'; }); app.listen(3000);