/** * Module dependencies. */ var render = require('./lib/render'); var logger = require('koa-logger'); var route = require('koa-route'); var views = require('co-views'); var koa = require('../..'); var app = koa(); // "database" var posts = []; // middleware app.use(logger()); // route middleware app.use(route.get('/', list)); app.use(route.get('/post/new', add)); app.use(route.get('/post/:id', show)); app.use(route.post('/post', create)); // route definitions /** * Post listing. */ function *list() { this.body = yield render('list', { posts: posts }); } /** * Show creation form. */ function *add() { this.body = yield render('new'); } /** * Show post :id. */ function *show(id) { var post = posts[id]; if (!post) this.throw(404, 'invalid post id'); this.body = yield render('show', { post: post }); } /** * Create a post. */ function *create() { var post = yield parse(this); var id = posts.push(post) - 1; post.created_at = new Date; post.id = id; this.redirect('/'); } // TODO: use a lib... var qs = require('querystring'); function parse(ctx) { return function(done){ var buf = ''; var req = ctx.req; req.setEncoding('utf8'); req.on('data', function(chunk){ buf += chunk }); req.on('end', function(){ try { done(null, qs.parse(buf)); } catch (err){ err.body = buf; err.status = 400; done(err); } }); } } // listen app.listen(3000);