https://github.com/lstkz/express-api-error-handler
Error handler for express APIs
https://github.com/lstkz/express-api-error-handler
Last synced: 3 months ago
JSON representation
Error handler for express APIs
- Host: GitHub
- URL: https://github.com/lstkz/express-api-error-handler
- Owner: lstkz
- Created: 2016-09-23T10:57:23.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-12-03T12:57:17.000Z (over 6 years ago)
- Last Synced: 2024-10-30T01:05:07.541Z (7 months ago)
- Language: JavaScript
- Homepage:
- Size: 12.7 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# express-api-error-handler
[](https://travis-ci.org/lsentkiewicz/express-api-error-handler)
[](https://codecov.io/gh/lsentkiewicz/express-api-error-handler)express-api-error-handler is a simple library for error handling in express apps
It's compatible with [joi](https://www.npmjs.com/package/joi) and [http-errors](https://www.npmjs.com/package/http-errors);## Installation
```
npm i --save express-api-error-handler
```## Sample usage with [bunyan](https://github.com/trentm/node-bunyan) as a logger
You can test the below example by running `npm run example`
```js
// app.jsimport express from 'express';
import Joi from 'joi';
import HTTPError from 'http-errors';
import bunyan from 'bunyan';
import { errorHandler, notFoundHandler } from '../src';const app = express();
const logger = bunyan.createLogger({ name: 'app' });app.get('/', (req, res) => {
res.json({ ok: true });
});app.get('/error', (req, res, next) => {
next(new HTTPError.NotFound('Object not found'));
});app.get('/joi', (req, res, next) => {
Joi.validate({ foo: 'bar' }, { foo: Joi.number() }, next);
});app.use(errorHandler({
log: ({ err, req, res, body }) => {
logger.error(err, `${body.status} ${req.method} ${req.url}`);
},
hideProdErrors: true, // hide 5xx errors if NODE_ENV is "production" (default: false)
}));app.use(notFoundHandler({
log: ({ req, res }) => {
logger.error(`404 ${req.method} ${req.url}`);
},
}));const PORT = 3000;
app.listen(PORT);```
### Errors from http-errors
`GET http://localhost:3000/error`Response:
Console log:
### Errors from Joi
`GET http://localhost:3000/joi`Response:
Console log:
### Not found routes
`GET http://localhost:3000/foobar`
Response:
Console log:
## API
#### Error handler
```js
errorHandler({
/**
* The optional handler for logging
* @param {Error} err the occured error
* @param {Object} req the request express object
* @param {Object} res the response express object
* @param {Object} body the response body
* @param {Number} body.status the returned http status
* @param {String} body.error the error message
* @param {Array} body.details the Joi validation details
* @param {Array} body.stack the stack trace (only if NODE_ENV !== 'production')
*/
log: ({ err, req, res, body }) => {
...
},/**
* Hides 5xx errors if NODE_ENV is "production" (default: false)
*/
hideProdErrors: true/false,
})
```
#### Not found handler
```js
notFoundHandler({
/**
* The optional handler for logging
* @param {Object} req the request express object
* @param {Object} res the response express object
*/
log: ({ req, res }) => {
...
},
})
```MIT License
Copyright (c) 2016 Łukasz Sentkiewicz