![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
lambda-request-handler
Advanced tools
An npm module that allows your Node.js web applications to be deployed as an AWS Lambda function and invoked in response to API Gateway, HTTP API, or Application Load Balancer requests.
An npm module that allows your Node.js web applications to be deployed as an AWS Lambda function and invoked in response to API Gateway, HTTP API, or Application Load Balancer requests.
The list of supported frameworks matches in-process-request
nodejs12.x
runtime)nodejs12.x
runtime)Inspired by aws-serverless-express
It supports nodejs10.x
and nodejs12.x
execution environments.
The main differences between this module and aws-serverless-express
are
The handler supports events from the following sources:
There's a demo app showcasing the features of this library available here
The default export of lambda-request-handler
is a function that takes an application handler (i.e. Express.js app instance) as an argument and returns an AWS Lambda handler function.
An additional header is injected into the request
x-aws-lambda-request-id
- AWS Lambda Request Id$ npm install lambda-request-handler
const express = require('express')
const lambdaRequestHandler = require('lambda-request-handler')
const app = express()
app.get('/user/:id', (req, res) => {
res.json({
id: req.params.id,
lambdaRequestId: req.header('x-aws-lambda-request-id')
name: 'John'
})
})
const handler = lambdaRequestHandler(app)
module.exports = { handler }
If the above file in your Lambda source was called index.js
then the name of the handler in the Lambda configuration is index.handler
Sometimes the application needs to read configuration from remote source before it can start processing requests. For example it may need to decrypt some secrets managed by KMS. For this use case a special helper deferred
has been provided. It takes a factory function which returns a Promise that resolves to the app instance. The factory function will be called only once.
const lambdaRequestHandler = require('lambda-request-handler')
const AWS = require('aws-sdk')
const express = require('express')
const createApp = (secret) => {
const app = express();
app.get('/secret', (req, res) => {
res.json({
secret: secret,
})
})
}
const myAppPromise = async () => {
const kms = new AWS.KMS()
const data = await kms.decrypt({
CiphertextBlob: Buffer.from(process.env.ENCRYPTED_SECRET, 'base64')
}).promise()
const secret = data.Plaintext.toString('ascii')
return createApp(secret);
};
const handler = lambdaRequestHandler.deferred(myAppPromise);
module.exports = { handler }
Please note that Hapi v19 dropped support for Node v10. The only AWS Lambda runtime that supports it is nodejs12.x
.
const Hapi = require('@hapi/hapi')
const lambdaRequestHandler = require('lambda-request-handler')
// create custom listener for Hapi
const myListener = new lambdaRequestHandler.HapiListener()
// Pass the custom listener to Hapi.server
const server = Hapi.server({
listener: myListener
});
server.route({
method: 'GET',
path: '/',
handler: (_request: any, _h: any) => {
return 'Hello World!';
}
});
const myAppPromise = async () => {
//wait for the server to initialize
await server.start()
// return the request listener function
return myListener.handler
};
const handler = lambdaRequestHandler.deferred(myAppPromise);
module.exports = { handler }
If the above file in your Lambda source was called index.js
then the name of the handler in the Lambda configuration is index.handler
This example is in Typescript
import lambdaRequestHandler from 'lambda-request-handler'
import { NestFactory } from '@nestjs/core';
import { Module, Get, Controller } from '@nestjs/common';
import { NestExpressApplication } from '@nestjs/platform-express';
@Controller()
class AppController {
@Get()
render() {
return { hello: 'world' };
}
}
@Module({
imports: [],
controllers: [AppController],
})
class AppModule {}
const getApp = async () => {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
return await lambdaRequestHandler.nestHandler(app);
}
const handler = lambdaRequestHandler.deferred(getApp);
exports = { handler }
If the above file in your Lambda source was called index.ts
, compiled to index.js
then the name of the handler in the Lambda configuration is index.handler
const polka = require('polka')
const lambdaRequestHandler = require('lambda-request-handler')
const app = polka()
app.get('/user/:id', (req, res) => {
res.json({
id: req.params.id,
lambdaRequestId: req.header('x-aws-lambda-request-id')
name: 'John'
})
})
const handler = lambdaRequestHandler(app.handler.bind(app))
module.exports = { handler }
If the above file in your Lambda source was called index.js
then the name of the handler in the Lambda configuration is index.handler
FAQs
An npm module that allows your Node.js web applications to be deployed as an AWS Lambda function and invoked in response to API Gateway, HTTP API, or Application Load Balancer requests.
We found that lambda-request-handler demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.