var koa = require('..'); var app = koa(); var tobi = { _id: '123', name: 'tobi', species: 'ferret' }; var loki = { _id: '321', name: 'loki', species: 'ferret' }; var users = { tobi: tobi, loki: loki }; // content negotiation middleware. // note that you should always check for // presence of a body, and sometimes you // may want to check the type, as it may // be a stream, buffer, string, etc. app.use(function *(next){ yield next; // responses vary on accepted type this.vary('Accept'); this.status = 'bad request'; // no body? nothing to format, early return if (!this.body) return; // accepts json, koa handles this for us, // so just return if (this.accepts('json')) return; // accepts xml if (this.accepts('xml')) { this.type = 'xml'; this.body = '<name>' + this.body.name + '</name>'; return; } // accepts html if (this.accepts('html')) { this.type = 'html'; this.body = '<h1>' + this.body.name + '</h1>'; return; } // default to text this.body = this.body.name; }); // filter responses, in this case remove ._id // since it's private app.use(function *(next){ yield next; if (!this.body) return; delete this.body._id; }); // try $ GET /tobi // try $ GET /loki app.use(function *(){ var name = this.path.slice(1); var user = users[name]; this.body = user; }); app.listen(3000);