JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1361
  • Score
    100M100P100Q151012F
  • License Apache-2.0

AWS lambda router

Package Exports

  • aws-lambda-router

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (aws-lambda-router) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Build Status npm version dependencies

aws-lambda-router

A small library providing routing for AWS ApiGateway Proxy Integrations and SNS...

Install

$ npm install aws-lambda-router

Usage

const router = require('aws-lambda-router');

exports.handler = router.handler(
    // the router-config contains configs for every type of 'processor'
{
    // for handling an http-call from an AWS Apigateway proxyIntegration we provide the following config:
    proxyIntegration: {
        // activate CORS on all http-methods (OPTIONS requests are handled automagically);
        // if set to true, these default headers will be sent on every response:
        // "Access-Control-Allow-Origin" = "'*'"
        // "Access-Control-Allow-Methods" = "'GET,POST,PUT,DELETE,HEAD'"
        // "Access-Control-Allow-Headers" = "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
        cors: true,
        routes: [
            {
                // the request-path-pattern to match:
                path: '/graphql',
                // http method to match
                method: 'POST',
                // provide a function to be called with the propriate data
                action: request=>doAnything(request.body)
            },
            {
                // request-path-pattern with a path variable:
                path: '/article/:id',
                method: 'GET',
                // we can use the path param 'id' in the action call:
                action: request=>getSomething(request.paths.id)
            },
            {
                path: '/:id',
                method: 'DELETE',
                action: request=>deleteSomething(request.paths.id)
            }
        ],
        debug: true,
        // custom mapping of thrown errors to http response code error: 
        // the action can throw an object like
        // "throw {reason: 'NotFound', message: 'object id not found'}"
        // the http response then contains the configured value as response code and the message as the body
        errorMapping: {
            'NotFound': 404,
            'ServerError': 500
        }
    },
    // for handling calls initiated from AWS-SNS:
    sns: {
        routes: [
            {
                // a regex to match the content of the SNS-Subject:
                subject: /.*/,
                // Attention: the message is JSON-stringified 
                action: sns => service.doSomething(JSON.parse(sns.Message))
            }
        ]
    }
});

local developement

The best is to work with npm link

See here: http://vansande.org/2015/03/20/npm-link/

Release History

  • 0.2.1 proxyIntegration: CORS in Preflight, status code 400 for invalid body, set more CORS headers as default
  • 0.2.0 Attention: breaking changes for configuration; add SNS event process
  • 0.1.0 make it work now
  • 0.0.1 initial release