aws-lambda-middleware
raw JSON → 1.1.2 verified Fri May 01 auth: no javascript
AWS Lambda Middleware is a lightweight library (v1.1.2, last updated 2023) for applying middleware and validating request parameters in AWS Lambda functions. It provides PropTypes for type checking and data correction, a Validate function for custom rules, and supports Express and other frameworks. Key differentiators include minimal overhead for Lambda, deep array/object validation, and customizable error message templates. Release cadence is sporadic, with major changes between v0.9 and v1.0 including reserved prop names, option changes, and required() method replacing isRequired.
Common errors
error TypeError: Prop.string.required is not a function ↓
cause Using .required without parentheses; should be .required().
fix
Change to Prop.string.required()
error Error: Reserved prop name 'object' cannot be overridden ↓
cause Using 'object' as a prop name is reserved since v1.0.
fix
Rename the prop to something else (e.g., 'params').
error TypeError: Cannot destructure property 'event' of 'undefined' ↓
cause Old syntax for default() with (event) => {} in v1.0+.
fix
Use named parameter object: Prop.string.default(({event}) => event.headers['x-id'])
Warnings
breaking v1.0 changes: object and array are reserved prop names, .required() replaces .isRequired, default() uses named parameters, and option() for trim settings. ↓
fix Update code: use .required() instead of .isRequired, change Prop.*.default(({event}) => {}) to named parameters, use .option({trim: false}) for per-prop trim.
breaking v0.9 -> v1.0: interpretation of object and array expressions changed from 'validate only when value exists' to 'required validation'. ↓
fix Remove required() from object/array props if they should be optional; or add .default() to avoid required validation.
deprecated .isRequired is deprecated since v1.0.0. ↓
fix Replace .isRequired with .required() method.
gotcha Prop.string.default('') returns undefined if string is empty; fixed in v1.0.4. ↓
fix Upgrade to v1.0.4 or later.
gotcha Prop.bool.default(false) sets undefined; fixed in v1.0.4. ↓
fix Upgrade to v1.0.4 or later.
Install
npm install aws-lambda-middleware yarn add aws-lambda-middleware pnpm add aws-lambda-middleware Imports
- Middleware wrong
const Middleware = require('aws-lambda-middleware').Middlewarecorrectconst { Middleware } = require('aws-lambda-middleware') - Prop wrong
const { PropTypes } = require('aws-lambda-middleware')correctconst { Prop } = require('aws-lambda-middleware') - Prop.string wrong
Prop.string.isRequiredcorrectProp.string.required()
Quickstart
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
console.log(`Hello ${query.username}`)
return {
statusCode: 200,
body: JSON.stringify({ message: 'success' })
}
})