lambda-lib v4.5.1
AWS Lambda Lib
This library contains a set of decorators to apply to AWS Lambda function to help abstract the event source and eliminate boilerplate code
Example
import { HandlerController, ApiGateway } from 'lambda-lib'
const errorMap = [
  {
    error: ReferenceError,
    status: 400
  },
  {
    error: Error,
    status: 404
  }
]
@HandlerController
class SampleLambdaHandler {
  @ApiGateway({ statusCode: 200, cors: true })
  helloHandler (event) {
    return Promise.resolve({ hello: world })
  }
  @ApiGateway({ statusCode: 200, errorMap: errorMap })
  failedHandler (event) {
    return Promise.reject(new ReferenceError('I am a reference error'))
  }
}
const handler = new SampleLambdaHandler()
export default handler.getHandlers()Sample Response
HelloHandler Response
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, PUT, PATCH, DELETE, OPTIONS
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Type: application/json
Date: Tue, 29 Aug 2017 17:07:04 GMT
accept-ranges: bytes
cache-control: no-cache
content-length: 39
vary: origin,accept-encoding
{
  "hello": "world"
}FailedHandler Response
HTTP/1.1 400 Bad Request
Connection: keep-alive
Content-Type: application/json
Date: Tue, 29 Aug 2017 17:08:00 GMT
cache-control: no-cache
content-length: 398
vary: accept-encoding
{
  "error": {
    "message": "I am a reference error",
    "name": "ReferenceError",
    "_stackTrace": [
      "ReferenceError: I am a reference error",
      "at SampleLambdaHandler.failedHandler (/.../src/resources/example/index.js:223:15)",
      "at /.../node_modules/lambda-lib/lib/api-gateway.js:93:19",
      "at process._tickDomainCallback (internal/process/next_tick.js:135:7)"
    ]
  }
}Specifying a custom error response
import { Plugins } from 'lambda-lib'
// Registering a custom error response plugin. This is applied globally.
ApiGateway.registerPlugin(new Plugins.ErrorResponse(err => {
  return {
    test: 'This is the error response body for all errors',
    error: err.message
  }
}))Sample response with custom error
HTTP/1.1 400 Bad Request
Connection: keep-alive
Content-Type: application/json
Date: Tue, 29 Aug 2017 17:08:00 GMT
cache-control: no-cache
content-length: 398
vary: accept-encoding
{
  "test": "This is the error response body for all errors",
  "error": "I am a reference error"
}Included Plugins
| Plugin | Description | 
|---|---|
| cors | When true, a set of default CORS headers are added to the response. Such as: Access-Control-Allow-Origin, Access-Control-Allow-Credentials, Access-Control-Allow-Methods | 
| statusCode | Default status code for the response. Any object resolved via a Promise in the handler, will get this status code. | 
| errorMap | Mapping of error types to response codes for rejected promises. | 
| errorResponse | Format the response of an error. | 
Plugin Hooks
| Hook | Description | 
|---|---|
| INITIALIZE | Initialize is executed right at the beginning of the request, before any default plugins have been executed | 
| PRE_EXECUTE | The pre execute hook is run right before the execution of handler code. | 
| POST_EXECUTE | This hook, post execute, is run after the execution of the handler code. | 
| ON_ERROR | When ever there is an error which results in a rejected promise, this hook is executed. | 
| FINALLY | Final hook executed after the response has been sent to the client already. (Unable to manipulate response contents here) | 
Writing your own plugin
See built-in plugins for samples
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago