node package manager
Easy collaboration. Discover, share, and reuse code in your team. Create a free org »


API Problem version License

HTTP Problem Utility

Build Status Downloads Code Climate Coverage Status Dependency Status Dependencies


npm install --only=production --save api-problem


Constructor: Problem(status[, title][, type][, members])

name type required default description referece
status String N/A The HTTP status code generated by the origin server for this occurrence of the problem Section 3.1
title String HTTP status phrase A short, human-readable summary of the problem type Section 3.1
type String about:blank A URI reference that identifies the problem type Section 3.1
details Object N/A additional details to attach to object Section 3.1
import Problem from 'api-problem'
// HTTP defaults 
new Problem(404)
//=> { status: '404', title: 'Not Found', type: '' } 
// override defaults 
new Problem(404, 'Oops! Page Not Found')
//=> { status: '404', title: 'Oops! Page Not Found', type: '' } 
// custom values 
new Problem(403, 'You do not have enough credit', '')
//=> { status: '403', title: 'You do not have enough credit', type: '' } 
// additional details 
new Problem(403, 'You do not have enough credit', '', {
  detail: 'Your current balance is 30, but that costs 50.',
  instance: '/account/12345/msgs/abc',
  balance: 30,
  accounts: ['/account/12345', '/account/67890']
//=> { status: '403', title: 'You do not have enough credit', type: '', detail: 'Your current balance is 30, but that costs 50.', instance: '/account/12345/msgs/abc', balance: 30, accounts: ['/account/12345', '/account/67890'] } 
// HTTP defaults + Details 
new Problem(403, {
  detail: 'Account suspended',
  instance: '/account/12345',
  date: '2016-01-15T06:47:01.175Z',
  account_id: '12345'
//=> { status: '403', title: 'Forbidden', type: '', detail: 'Account suspended', instance: '/account/12345', account_id: 12345, 'date: 2016-01-15T06:47:01.175Z' } 

Method : toString()

returns a simplified, human-readable string representation

let prob = new Problem(403, 'You do not have enough credit', '')
prob.toString() //=> [403] You do not have enough credit ('') 

Method : send(response)

uses response.writeHead and response.end to send an appropriate error respnse message with the Content-Type response header to application/problem+json

import http from 'http'
import Problem from 'api-problem'
let response = new http.ServerResponse()

Express Middleware

A standard connect middleware is provided. The middleware intercepts Problem objects thrown as exceptions and serializes them appropriately in the HTTP response while setting the Content-Type response header to application/problem+json

import express from 'express'
import Problem from 'api-problem'
import Middleware from 'api-problem/lib/middleware'
let app = express()
app.get('/', (req, res) => {
  throw new Problem(403)

©️  ·  License: ISC  ·  Github: @ahmadnassri  ·  Twitter: @ahmadnassri