express-api-error-handler

1.1.0 • Public • Published

express-api-error-handler

Build Status codecov

express-api-error-handler is a simple library for error handling in express apps It's compatible with joi and http-errors;

Installation

npm i --save express-api-error-handler

Sample usage with bunyan as a logger

You can test the below example by running npm run example

// app.js
 
import 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:
Alt text

Console log:
Alt text

Errors from Joi

GET http://localhost:3000/joi

Response:
Alt text

Console log:
Alt text

Not found routes

GET http://localhost:3000/foobar

Response:
Alt text

Console log:
Alt text

API

Error handler

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

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

Dependencies (1)

Dev Dependencies (21)

Package Sidebar

Install

npm i express-api-error-handler

Weekly Downloads

1,298

Version

1.1.0

License

MIT

Last publish

Collaborators

  • lsentkiewicz