express-api-error-handler

Error handler for express APIs

Usage no npm install needed!

<script type="module">
  import expressApiErrorHandler from 'https://cdn.skypack.dev/express-api-error-handler';
</script>

README

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