Skip to main content

Early return

Some middlewares might need to stop the whole execution flow and return a response immediately.

If you want to do this you can invoke return response in your middleware.

Note: this will totally stop the execution of successive middlewares in any phase (before, after, onError) and returns an early response (or an error) directly at the Lambda level. If your middlewares do a specific task on every request like output serialization or error handling, these won't be invoked in this case.

In this example, we can use this capability for building a sample caching middleware:

// some function that calculates the cache id based on the current event
const calculateCacheId = event => {
/* ... */
}
const storage = {}

// middleware
const cacheMiddleware = options => {
let cacheKey

const cacheMiddlewareBefore = async (request) => {
cacheKey = options.calculateCacheId(request.event)
if (options.storage.hasOwnProperty(cacheKey)) {
// exits early and returns the value from the cache if it's already there
return options.storage[cacheKey]
}
}

const cacheMiddlewareAfter = async (request) => {
// stores the calculated response in the cache
options.storage[cacheKey] = request.response
}

return {
before: cacheMiddlewareBefore,
after: cacheMiddlewareAfter
}
}

// sample usage
const handler = middy((event, context) => {
/* ... */
}).use(
cacheMiddleware({
calculateCacheId,
storage
})
)