From bdd6610208e9fe5971e6aed4378598092f2b9b5a Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Sat, 24 Jun 2017 16:34:47 +0200 Subject: refactor: separate app, responders --- src/app.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/app.js (limited to 'src/app.js') diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000..84722fc --- /dev/null +++ b/src/app.js @@ -0,0 +1,65 @@ +'use strict' + +const Koa = require('koa') +const app = new Koa() + +const streamify = require('stream-array') + +const send = require('koa-send') +const responders = require('./responders.js') + +const config = require('./modules/config.js') + +const Router = require('koa-router') +const router = new Router() + +app.context.getURL = router.url.bind(router) + +const Posts = require('./modules/posts.js') +const posts = Posts.getFolder(config.posts.folder) + +function toArrayStream (iterator) { + return streamify(Array.from(iterator.entries())) +} + +const postsStream = toArrayStream(posts) +router.get('home', '/', async function (ctx, next) { + responders.home(ctx, config, postsStream) +}) + +router.get('post', '/post/:filename', async function (ctx, next) { + ctx.assert(posts.has(ctx.params.filename), 404, 'Post not found') + const post = posts.get(ctx.params.filename) + post.body = Posts.render(post) + + responders.post(ctx, config, post) +}) + +const taxonomies = Posts.taxonomise(config.taxonomies, posts) +for (let [term, items] of taxonomies) { + router.get(`taxon-${term}`, `/${term}/:value`, async function (ctx, next) { + const value = ctx.params.value + ctx.assert( + items.has(ctx.params.value), + 404, + `Could not find ${term} ${value}` + ) + + const taxonItems = toArrayStream(items.get(value)) + + responders.taxon(ctx, config, taxonItems) + }) +} + +app.use(router.routes()).use(router.allowedMethods()) + +const prefix = /^\/static\// +app.use(async function (ctx) { + if (prefix.test(ctx.path)) { + await send(ctx, ctx.path.replace(prefix, ''), { + root: './static' + }) + } +}) + +module.exports = app -- cgit 1.4.1