/micro-boom

Wraps errors in micro with Boom

Primary LanguageJavaScript

micro-boom NPM travis-ci Greenkeeper

Wraps errors in micro services Boom errors.

Example Responses

{
  "error": "Unauthorized", 
  "message": "Not authenticated", 
  "statusCode": 401
}
{
  "data": {
    "reason": "Username is wrong"
  }, 
  "error": "Unauthorized", 
  "message": "Not authenticated", 
  "statusCode": 401
}

Installation

npm install --save micro-boom

Or even better

yarn add micro-boom

Import and Usage Example

const { handleErrors, createError } = require('micro-boom')

module.exports = handleErrors(async function (req, res) {
  throw createError(401, 'Not authenticated', {
    reason: 'Bad password'
  })
})

API

handleErrors

Catches error from an async function, wraps them in a Boom error object and generates a JSON response.

The status code of an error is determined by three factors, in order:

  • Status code is set to err.output.statusCode
  • If not set, error is inferred from res.statusCode
  • Default to HTTP 500 (also defaults to HTTP 500 if status is < 400)

🚨 TAKE NOTE 🚨
All HTTP 500 errors have their user provided message removed for security reasons.

Parameters

  • fn Function Async function, your normal micro logic.
  • dump Boolean Optional. Dumps err.stack to stderr if true

Examples

const { handleErrors } = require('micro-boom')

// Returns HTTP 500
module.exports = handleErrors(async function (req, res) {
  throw Error('Uh-oh, something bad happened.')
})
const { handleErrors } = require('micro-boom')

// Returns HTTP 401
module.exports = handleErrors(async function (req, res) {
  res.statusCode = 401
  throw Error('Unauthorized')
})

Returns an async Function.

createError

Alias for Boom#create(statusCode, [message], [data]).

Parameters

  • statusCode Number HTTP status code, must be >= 400
  • message String An optional error message.
  • data [Any] Some optional error metadata, serialized with JSON.stringify.

Examples

const { handleErrors, createError } = require('micro-boom')

// Message defaults to what corresponds to the HTTP error code
module.exports = handleErrors(async function (req, res) {
  throw createError(500)
})
const { handleErrors, createError } = require('micro-boom')

// HTTP 401: Unauthorized
module.exports = handleErrors(async function (req, res) {
  throw createError(401, 'Unauthorized')
})
const { handleErrors, createError } = require('micro-boom')

// HTTP 401: Unauthorized with metadata,
// set in `.data` of the response.
module.exports = handleErrors(async function (req, res) {
  throw createError(401, 'Unauthorized', {
    reason: 'Bad password',
    foo: 'bar'
  })
})

Returns an async Function.