https://github.com/tepez/hapi-lambda-handler
Run Hapi server on AWS Lambda
https://github.com/tepez/hapi-lambda-handler
aws-lambda hapijs serverless
Last synced: 12 months ago
JSON representation
Run Hapi server on AWS Lambda
- Host: GitHub
- URL: https://github.com/tepez/hapi-lambda-handler
- Owner: tepez
- Created: 2017-12-12T12:15:09.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T21:23:40.000Z (about 3 years ago)
- Last Synced: 2025-03-16T23:19:37.336Z (about 1 year ago)
- Topics: aws-lambda, hapijs, serverless
- Language: TypeScript
- Size: 1.55 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# hapi-lambda-handler
> Run Hapi server on AWS Lambda
[](https://badge.fury.io/js/%40tepez%2Fhapi-lambda-handler)
[](http://travis-ci.org/tepez/hapi-lambda-handler)
## Install
```
npm install --save @tepez/hapi-lambda-handler
```
## Usage
```
// handler.js
const HapiLambdaHandler = require('@tepez/hapi-lambda-handler');
const Hapi = require('hapi');
cosnt server = new Hapi.Server();
server.connection({});
server.route({
method: 'GET',
path: '/health',
handler: (request, reply) => reply({ status: 'ok' })
});
exports.handler = HapiLambdaHandler.handlerFromServer(server);
```
## API
### `handlerFromServer(server, [injectOptions])`
Return a Lambda Proxy handler function that handles event, context and callback as passed by a lambda-proxy integration of AWS Api Gateway.
- `server`:
The Hapi server or a promise to it if it has to be initialized first.
It is the **responsibility** of the using package to report initialization errors in the server.
If the promise to the server rejects, 500 errors will be returned for every request.
- `injectOptions`:
- `basePath: string`
If the API is deployed under a [custom path mapping](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html)
this should be the basePath, e.g. '/v1.0'.
- `modifyRequest: (event: APIGatewayEvent, context: Context, request: ServerInjectOptions) => void`
A synchronous callback receiving the `event`, the `context` and the `request` just before injecting it to the Hapi server.
This is a chance to modify the request in-place, e.g. to apply credentials to it.
## Request tail
Sometimes we need to wait for some processes to finish before returning the response
to APIGateway, e.g. report an error to Sentry.
Hapi 17 [dropped support](https://github.com/hapijs/hapi/issues/3658) for request tails,
which was the method we used before.
You can create an array of promises on `request.app.tailPromises`, the handler will
wait for them with `Promise.all()` before returning the response.
```typescript
function handler(request: IRequestWithTailPromises) => {
// ...
if (!request.app.tailPromises) request.app.tailPromises = [];
request.app.tailPromises.push(somePromise);
}
```