This is a collection of useful middlewares.
redirect
node middleware that handles redirection.
Usage
require 'middleware' # redirects `/foo` to `/bar` routerget '/foo' redirect '/bar' # redirects `/foo/$var` to `/bar/$var` routerget '/foo/:id' redirect "/bar/"
render
middleware to render arbitrary views. This middleware can be used with all existing template engines.
Usage
Middleware called before render
should populate the req.loaded
object
with data that the view should present to the client
render
will send the output of view req.loaded
to the client
Example
= JSONstringify params routerget '/resource' req.loaded = foo: 'bar' fitz: 1..10 next render jsonView # will render `'{"foo":"bar","fitz":[1,2,3,4,5,6,7,8,9,10]}'` to the # client
bind
Transforms an asynchronous function into a middleware.
The result of the function will be bound to request.loaded
.
Use this library if you want to load async data in a clean way.
Short Description
Transforms an asynchronous function f
into a middleware.
The middleware will call f
with (req, callback)
.
f
has to call callback
with err, value
which will cause value
to be bound to req.loaded[name]
.
Usage
bind name # do async stuff and call `next` when you are finished error = null result = 'result' next errorresult
name
is the directive where to save the results from function
.
# will bind the result of asnycMethod to `req.loaded.foo` bind 'foo' asyncMethod next
name
can be nested.
# will bind the result of asyncMethod to `req.loaded.foo.bar` bind 'foo.bar' asyncMethod next
If the asynchronous method returns an error the process is aborted and a Status Code of 500 is returned to the user.
Example
routerget '/user' bind 'users.all' daouserall next next consolelog 'loaded users'reqloadedusersall # will output the result of `dao.user.all` render viewuserall routerget '/user/:id' bind 'user.object' daouserbyId reqparamsidnext render viewusershow
exec
Simple way to create middleware that should not modify the response
.
Takes care of errors.
Useful for tasks like updating the database.
Example
routerpost '/user/:id' exec daouserupdate reqparamsidreqbodynext
exec
Without routerpost '/user/:id' daouserupdate reqparamsidreqbody if err? reswriteHead 500 resend 'Internal Server Error' else next
flash
used for setting, loading flash messages.
require 'mw' routerpost '/foo' flash 'hello flash' redirect 'back' routerget '/foo' loadFlash next consolelog reqloadedflash # prints {message: 'hello flash', type: 'info' # view.foo will receive `req.loaded` and can print them to the dom render viewfoo
A view helper for displaying alerts can be found in dombox.
condition
if-else
statement as a middleware
require 'mw' # the condition is dependant on the state # in this example we use this simplified conditions = true= false # this would be a useful condition = reqsession?user? = next consolelog msg # for details about sequenz see https://github.com/snd/sequenz httpcreateServer sequenz condition alwaysTrue log'this middleware is executed'log'this middleware is ignored' condition alwaysFalse log'this middleware is ignored'log'this middleware is executed' condition alwaysFalse log'nothing is shown and the next middleware is executed' reqend
Parse Basic Auth
Allows to parse Basic Auth received from the Authorization Header.
httpcreateServer sequenz mwparseBasicAuth consolelog "Credentials are User: Password: " reqend
Allows to set a default value if no credentials are submitted
mwparseBasicAuth user: ''password: ''