1. 程式人生 > >nodejs-koa框架的中介軟體級聯

nodejs-koa框架的中介軟體級聯

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);