node package manager
Don’t reinvent the wheel. Reuse code within your team. Create a free org »

handle-http-error

Handle HTTP Error

Build Status Coverage Status

Handle a few common cases when an HTTP request got an error.

How to use

// The module exports a builder function.
const buildHandler = require('handle-http-error');
 
// The builder can build an error handler. The `overrides` is an optional object, and if provided,
// will be merged into the result error instance, overriding any conflicts.
const handler = buildHandler(overrides);
 
// The handler is a function that can be used to parse HTTP responses or errors, and it will throw an
// HTTP error (with the module `http-errors`) if it sees an error or an HTTP response with status 4xx
// or 5xx. For examples (see the use cases and the tests for more complete examples):
handler(error);
handler(res, body);
 
// The handler can look into the arguments and try to find an object that looks like an error, and
// merge the attributes into the result error. For example this would throw an error with an attribute
// `code: 40400`:
handler(res, { error: { statusCode: 404, code: 40400, message: '404 Not Found' } });

Use cases

Request + Bluebird

const request = require('request').defaults({ json: true });
require('bluebird').promisifyAll(request, { multiArgs: true });
 
const handler = require('handle-http-error')({
  type: 'application'
});
 
// When it responses 2xx.
request.getAsync(someUrl).spread(handler).spread((res, body) => {
  // ...
});
 
// When it responses 404.
request.getAsync(someUrl).spread(handler).then(() => {
  throw new Error('expected an error');
}, (err) => {
  err.should.be.Error();
  err.should.have.property('statusCode', 404);
  err.should.have.property('message', '404 Not Found');
  err.should.have.property('type', 'application');
});
 
// When it responses 404 and custom informations with HTML body (like `{ error: { statusCode: 404,
// code: 40400, message: '404 Not Found' } }`).
return request.getAsync(someUrl).spread(handler).then(() => {
  throw new Error('expected an error');
}, (err) => {
  err.should.be.Error();
  err.should.have.property('statusCode', 404);
  err.should.have.property('code', 40400);
  err.should.have.property('message', '404 Not Found');
  err.should.have.property('type', 'application');
});