4.2.2 • Published 3 years ago
@schibsted/middy-error-handler v4.2.2
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
statusCodeandmessage
Install
To install this middleware you can use NPM:
npm install --save @schibsted/middy-error-handlerOptions
logger(defaults toconsole) - a logging function that is invoked with the current error as an argument. You can passfalseif 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 asexposeStackTraceis 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.