@schibsted/middy-error-handler
Version:
Middy middleware for adding caching headers to success response and errors
99 lines (69 loc) • 3.71 kB
Markdown




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`](https://npm.im/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](https://github.com/middyjs/middy/tree/master/packages/http-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:
```bash
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 entry
- `exposeStackTrace` (defaults to `false`) - if `true`, the stack trace will be exposed in the response body
- `filter` (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
```javascript
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: '...'
// }
});
```
```javascript
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: '...'
// }
});
```
Everyone is very welcome to contribute to this repository. Feel free to [raise issues](https://github.com/schibsted/middy-error-handler/issues) or to [submit Pull Requests](https://github.com/schibsted/middy-error-handler/pulls).