var compose = require('koa-compose'); var http = require('http'); var koa = require('..'); var app = koa(); var calls = []; // x-response-time function responseTime(){ return function responseTime(next){ return function *(){ var start = new Date; yield next; var ms = new Date - start; this.set('X-Response-Time', ms + 'ms'); } } } // logger function logger(){ return function logger(next){ return function *(){ var start = new Date; yield next; var ms = new Date - start; console.log('%s %s - %s', this.method, this.url, ms); } } } // response function respond() { return function respond(next){ return function *(){ yield next; if ('/' != this.url) return; this.body = 'Hello World'; } } } // composed middleware function all() { return compose([ responseTime(), logger(), respond() ]); } app.use(all()); http.createServer(app.callback()).listen(3000);