@schibsted/middy-error-handler
v4.2.2
Published
Middy middleware for adding caching headers to success response and errors
Downloads
7,130
Readme
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 entryexposeStackTrace
(defaults tofalse
) - iftrue
, the stack trace will be exposed in the response bodyfilter
(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.