中间件级联

Koa是中间件通过一种更加传统(您也许会很熟悉)的方式进行级联, 摒弃了以往node频繁的回调函数造成的复杂代码逻辑。我们通过generators来实现“真正”的中间件。
Connect简单 地将控制权交给一系列函数来处理,直到函数返回。与之不同,当执行yield next 语句时,Koa暂停了该中间件,继续执行下一个符合请求的中间件,然后控制权再逐级返回给上层中间件。

下面的例子页面返回“Hello World",然而当请求开始时, 请求经过x-response-time和logging中间件,并记录中间件执行起始时间。然后将控制权交给response中间件。当中间件运行到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);

你可能感兴趣的:(中间件级联)