Streaming HTTP routing for Node.js. Best served with Oban and a dash of water. Built on Highland.
npm install livewire
{route, get, post} = require \livewire
{ok, not-found} = require \dram
{body-params} = require \corps
User = require \theoretical-user-model
templates = require \theoretical-templater
route [
get '/' -> ok "hello"
get '/user/:id' (req)-> User.get req.params.id .chain templates.user
post '/user/:id' (req)->
params <- body-params JSON.parse, req .chain
model <- User.get req.params.id .chain
<- model.update params .save! .chain
redirect '/user/#id'
]
route
returns a function that takes a request and returns a result Stream. Funnily enough, that's exactly the kind of function you serve with Oban. Have a look at Peat and Dram if you need fancy responses.
Calls the functions in turn and returns the first nonempty stream. Given our handlers return empty streams for non-matching routes, this is sufficient to call the first matching route handler.
Takes a string method and path, a handler, and a request, and gives back a stream for a response. If the method or the path don't match, the stream is empty, and you can switch to an alternate stream with .otherwise
get
, post
et al
Are just respond
partially applied with the method.
A simple string path matches exactly. If the last character is /
, it matches a path prefix, unless the path is /
exactly. Paths can contain parameters, which are of the form :ident
. This match any non-/
string, and extract the value into req.params
under the key given by the identifier.
Request body handling has been removed from Livewire 0.6, and split out into its own module, Corps.
©2012-2014 Matt Brennan