Schibsted Middy error handler middleware
HTTP error handler middleware for the middy framework, the stylish Node.js middleware engine for AWS Lambda
Automatically handles any uncaught errors and creates a proper HTTP response
for them (using the message and the status code provided by the error object). We recommend generating these HTTP errors with the npm module http-errors
.
This middleware should be set as the last error handler unless you also want to register the http-reponse-serializer
. If so, this middleware should come second-last and the http-response-serializer
should come last.
This is an alternative to standard Middy error handler with the following differences:
- it always returns JSON object and not text
- it handles any uncaught error, not just the ones with
statusCode
and message
Install
To install this middleware you can use NPM:
npm install --save @schibsted/middy-error-handler
Options
logger
(defaults to console
) - a logging function that is invoked with the current error as an argument. You can pass false
if you don't want the logging to happen.level
(defaults to error
) - log level to use for the error log entryexposeStackTrace
(defaults to false
) - if true
, the stack trace will be exposed in the response bodyfilter
(function, defaults to always returning true
) - a function that is invoked with the current error as an argument. If it returns true
, the error is logged and its stack trace returned as long as exposeStackTrace
is also true, otherwise it is not.
Sample usage
with mostly default params
const middy = require('@middy/core');
const createError = require('http-errors');
const errorHandler = require('@schibsted/middy-error-handler');
const handler = middy(() => {
throw new createError.ServiceUnavailable('Service not available');
});
handler.use(errorHandler({exposeStackTrace: true}));
handler({}, {}).then((response) => {
console.log(response);
});
with custom logger and filtering out 404 errors
const middy = require('@middy/core');
const createError = require('http-errors');
const errorHandler = require('@schibsted/middy-error-handler');
const { LambdaLog } = require('lambda-log');
const logger = new LambdaLog({
tags: ['foobar'],
});
const handler = middy(() => {
throw new createError.ServiceUnavailable('Service not available');
});
handler.use(errorHandler({
filter: (err) => err.statusCode !== 404,
logger
}));
handler({}, {}).then((response) => {
console.log(response);
});
Contributing
Everyone is very welcome to contribute to this repository. Feel free to raise issues or to submit Pull Requests.