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.)
npm i aws-lambda-middleware
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'
})
}
})
You can set global options and cluster options.
You can set options such as
trim
.
You can simply apply Middleware in Lambda.
Checks and corrects the data types of request parameters.
PropTypes
andProp
are the same object.
It only verifies the validity of the request parameter value.
You can use it by adding custom rules.
The rules added to PropTypes and Validate are written in one line and used.
Error messages can be organized into templates.
Introducing a method that can be applied to the Express framework.
It can also be used in other frameworks.
object
and array
are designated as reserved prop name, so the rule cannot be overwritten.
trim settings for each PropTypes use .option()
.
{
param: Prop.string.option({ trim: false })
}
The abbreviated Prop
can be used instead of the PropTypes
.
PropTypes
can still be used as well.
.isRequired
is also compatible, but not recommended.
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 }) => {})
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
.
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
})
})