Skip to content

Instantly share code, notes, and snippets.

@copygirl
Created March 25, 2015 11:33
Show Gist options
  • Save copygirl/5decd6bb16c92cf1d85e to your computer and use it in GitHub Desktop.
Save copygirl/5decd6bb16c92cf1d85e to your computer and use it in GitHub Desktop.
export whenAll = (...tasks, next) ->
errored = false
tasksCompleted = 0
results = new Array tasks.length
callback = (index) ->
called = false
(err, ...args) ->
if errored
return
else if err
errored = true
next err
else if !called
called = true
results[index] = args
if ++tasksCompleted >= tasks.length
next null, ...results
for task, i in tasks
task callback i
require! {
fs
express
"../database"
"../useful": { pathx }
"../async"
}
path = pathx __dirname
router = express.Router!
getPost = (name, next) ->
(err, posts) <- database.getjson \posts
if err or post = posts.find (-> it.name == name) then return next err
(err, post.content) <- fs.readfile path "posts/#{post.id}-#{name}.html"
if err then return next err
else return next null, post
router.get "/:post/", (req, res, next) ->
(err, [post], [sidebar]) <- asnyc.whenAll do
getPost req.params.post, _
database.getjson \sidebar, _
if err or !post then return next err
res.render "post", { title: post.title, sidebar, post }
router.post "/:post/", (req, res, next) ->
(err, post) <- getPost req.params.post
if err then return next err
res.send post.content
export "/post/": router
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment