Skip to content

You can simply apply middleware and validation in Lambda.

License

Notifications You must be signed in to change notification settings

blaxk/aws-lambda-middleware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

aws-lambda-middleware

NPM version NPM downloads

AWS Lambda Middleware

You can simply apply Middleware in Lambda. 
Clean code split is possible, and it includes a simple and extensible Parameter PropTypes validater.
It is implemented as lightly as possible to reduce the burden when running Lambda.

🚀 v1.0 added features
A Validate function that is easy to expand and use has been added, and deep data of arrays and objects can now be processed.

It is compatible even in environments other than lambda. (node express etc.)

 

Install

npm i aws-lambda-middleware

 

Quick setting

const { Middleware, Prop } = require('aws-lambda-middleware')


exports.handler = new Middleware().add({
  queryStringParameters: {
      username: Prop.string.required(),
      age: Prop.integer,
      friends: [
        {
          name: Prop.string.length({ max: 20 }),
          gender: Prop.string.or(['male', 'female'])
        }
      ]
  }
}).add(async (event, context, prevData) => {
  const query = event.queryStringParameters

  //your code

  return {
      statusCode: 200,
      body: JSON.stringify({
        message: 'success'
      })
  }
})

 

Options

You can set global options and cluster options.

You can set options such as trim.

📖 Options detail docs

Middleware

You can simply apply Middleware in Lambda. 

📖 Middleware detail docs

PropTypes

Checks and corrects the data types of request parameters.

PropTypes and Prop are the same object.

📖 PropTypes detail docs

Validate

It only verifies the validity of the request parameter value.

You can use it by adding custom rules.

📖 Validate detail docs

 

The rules added to PropTypes and Validate are written in one line and used.

Message

Error messages can be organized into templates.

📖 Message detail docs

 

with Express

Introducing a method that can be applied to the Express framework.

It can also be used in other frameworks.

📖 with Express

   

⚠️ Upgrading from v0.9 to v1.0

1. object and array expressions

object and array are designated as reserved prop name, so the rule cannot be overwritten.

⚠️ Reserved prop names

2. Option settings for each PropTypes

trim settings for each PropTypes use .option().

{
  param: Prop.string.option({ trim: false })
}

3. PropTypes and Prop

The abbreviated Prop can be used instead of the PropTypes.
PropTypes can still be used as well.

4. .isRequired has been replaced by .required().

.isRequired is also compatible, but not recommended.

5. Parameter type of PropTypes.*.default() function

When dynamically setting the default value of PropTypes, the parameter type has been changed to named parameters.

v0.9

Prop.*.default((event) => {})

v1.0

Prop.*.default(({ event }) => {})

📖 PropTypes > Support methods

6. Interpreting object and array expressions

The interpretation of Object and Array expressions has been changed from validate only when value exists to required validation.
When setting the body as shown below, the returned status depends, so check the item document in PropTypes > Support methods.

📖 PropTypes > Support methods

exports.handler = new Middleware().add({
  body: {
    myId: Prop.string
  }
})

v0.9
Even if the body of the request parameter is an empty Object or has no value, status = 200 is returned.

v1.0
If the body of the request parameter is an empty Object or has no value, status = 400 is returned.
In order to validate only when value exists for the body, you must also set PropTypes on the body.

exports.handler = new Middleware().add({
  body: Prop.object.item({
    myId: Prop.string
  })
})

About

You can simply apply middleware and validation in Lambda.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published