1.0.0 • Published 12 years ago

middleware-bind v1.0.0

Weekly downloads
5
License
-
Repository
github
Last release
12 years ago

middleware-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, (req, next) ->
    # do async stuff and call `next` when you are finished
    error = null
    result = 'result'
    next error, result

name is the directive where to save the results from function.

# will bind the result of asnycMethod to `req.loaded.foo`
bind 'foo', (req, next) -> asyncMethod next

name can be nested.

# will bind the result of asyncMethod to `req.loaded.foo.bar`
bind 'foo.bar', (req, next) -> 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

router.get '/user',
    bind 'users.all', (req, next) -> dao.user.all next
    (req, res, next) ->
        console.log 'loaded users', req.loaded.users.all
        # will output the result of `dao.user.all`
        next()
    render view.user.all

router.get '/user/:id',
    bind 'user.object', (req, next) -> dao.user.byId req.params.id, next
    render view.user.show

Credits

bind was developed with snd during a project. The initial idea was from snd. I refactored the library and provided unit tests.