var http = require('http'); var koa = require('..'); var app = koa(); // logger 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); } } // passing any middleware to this middleware // will make it conditional, and will not be used // when an asset is requested. This is a modular // approach to conditiona-middleware.js function ignoreAssets(mw) { return function(next){ return function *(){ if (/(\.js|\.css|\.ico)$/.test(this.path)) { yield next; } else { yield mw(next); } } } } app.use(ignoreAssets(logger)); // sometimes it's useful to apply some // ad-hoc logic to enable middleware, for // example ignoring a logger on asset requests: app.use(function(next){ return function *(){ this.body = 'Hello World'; } }); app.listen(3000);