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
andmessage
Install
To install this middleware you can use NPM:
npm install --save @schibsted/middy-error-handler
Options
-
logger
(defaults toconsole
) - a logging function that is invoked with the current error as an argument. You can passfalse
if you don't want the logging to happen. -
level
(defaults toerror
) - log level to use for the error log entry -
exposeStackTrace
(defaults tofalse
) - iftrue
, the stack trace will be exposed in the response body -
filter
(function, defaults to always returningtrue
) - a function that is invoked with the current error as an argument. If it returnstrue
, the error is logged and its stack trace returned as long asexposeStackTrace
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);
// {
// statusCode: 503,
// body: '{"statusCode":503,"message":"Service not available","stack":"..."}'
// stack: '...'
// }
});
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, // don't log 404 errors, they happen a lot
logger
}));
handler({}, {}).then((response) => {
// same + also executes logger.error function
console.log(response);
// {
// statusCode: 503,
// body: '{"statusCode":503,"message":"Service not available","stack":"..."}'
// stack: '...'
// }
});
Contributing
Everyone is very welcome to contribute to this repository. Feel free to raise issues or to submit Pull Requests.