UNPKG

poet

Version:

quick and easy blog module

116 lines (105 loc) 2.81 kB
var utils = require('./utils'); var routeMap = { post: postRouteGenerator, page: pageRouteGenerator, tag: tagRouteGenerator, category: categoryRouteGenerator }; /** * Takes a `poet` instance and generates routes based off of * `poet.options.routes` mappings. * * @params {Object} poet */ function bindRoutes (poet) { var app = poet.app; var routes = poet.options.routes; // If no routes specified, abort if (!routes) return; Object.keys(routes).map(function (route) { var type = utils.getRouteType(route); if (!type) return; app.get(route, routeMap[type](poet, routes[route])); }); } exports.bindRoutes = bindRoutes; function addRoute (poet, route, handler) { var routes = poet.options.routes; var type = utils.getRouteType(route); var currentRoute = utils.getRoute(routes, type); if (currentRoute) { // Remove current route poet.app._router.stack.forEach(function (stackItem, index) { if (stackItem.route && stackItem.route.path && stackItem.route.path === route) { poet.app._router.stack.splice(index, 1); } }); // Update options route hash delete poet.options.routes[currentRoute]; } poet.options.routes[route] = handler; poet.app.get(route, handler); return poet; } exports.addRoute = addRoute; function postRouteGenerator (poet, view) { return function postRoute (req, res, next) { var post = poet.helpers.getPost(req.params.post); if (post) { res.render(view, { post: post }); } else { next(); } }; } exports.postRouteGenerator = postRouteGenerator; function pageRouteGenerator (poet, view) { return function pageRoute (req, res, next) { var postsPerPage = poet.options.postsPerPage, page = req.params.page, lastPost = page * postsPerPage, posts = poet.helpers.getPosts(lastPost - postsPerPage, lastPost); if (posts.length) { res.render(view, { posts: posts, page: page }); } else { next(); } }; } exports.pageRouteGenerator = pageRouteGenerator; function categoryRouteGenerator (poet, view) { return function categoryRoute (req, res, next) { var cat = req.params.category, posts = poet.helpers.postsWithCategory(cat); if (posts.length) { res.render(view, { posts: posts, category: cat }); } else { next(); } }; } exports.categoryRouteGenerator = categoryRouteGenerator; function tagRouteGenerator (poet, view) { return function tagRoute (req, res, next) { var tag = req.params.tag, posts = poet.helpers.postsWithTag(tag); if (posts.length) { res.render(view, { posts: posts, tag: tag }); } else { next(); } }; } exports.tagRouteGenerator = tagRouteGenerator;