bragg

AWS Lambda web framework

Usage no npm install needed!

<script type="module">
  import bragg from 'https://cdn.skypack.dev/bragg';
</script>

README

bragg Build Status

AWS λ web framework

This framework is heavily inspired by koa.

Install

$ npm install --save bragg

Usage

Simple example

Adding a single function as middleware is quite easy. The following example will succeed the lambda function with the value Foo Bar.

const bragg = require('bragg');
const app = bragg();

app.use(ctx => {
    ctx.body = 'Foo Bar';
});

exports.handler = app.listen();

Promise support

If a promise is assigned to the body property, it will be resolved before sending the result to the client.

const bragg = require('bragg');
const app = bragg();

app.use(ctx => {
    ctx.body = Promise.resolve('Foo Bar');
});

app.onError(err => {
    console.error(err.message);

    return cleanUp();	// Async cleanup process
});

exports.handler = app.listen();

Middlewares

Multiple middlewares will be executed one after the other. The result of the following example is Foo Bar Baz.

const bragg = require('bragg');
const app = bragg();

app.use(() => {
    return 'Foo';
});

app.use((ctx, result) => {
    return Promise.resolve(result + ' Bar');
});

app.use((ctx, result) => {
    ctx.body = result + ' Baz';
});

exports.handler = app.listen();

Mapping template

In order for you to use parameters provided through API Gateway, you should add a mapping template in the integration request.

#set($path = $input.params().path)
#set($qs = $input.params().querystring)
#set($identity = $context.identity)
{
    "identity": {
        #foreach($key in $identity.keySet())
            "$key": "$util.escapeJavaScript($identity.get($key))"
        #if($foreach.hasNext), #end
        #end
    },
    "params": {
        #foreach($key in $path.keySet())
            "$key": "$path.get($key)"
        #if($foreach.hasNext), #end
        #end
    },
    "query": {
        #foreach($key in $qs.keySet())
            "$key": "$qs.get($key)"
        #if($foreach.hasNext), #end
        #end
    },
    "body": $input.json('

)
}

These properties will then be available in the request object in the middleware function.

License

MIT © Sam Verschueren