fumble
Simple error objects in node. Created specifically to be used with the fetchr library and based on hapi.js' Boom.
Usage
import fumble from 'fumble';
import callAndProcess from './callAndProcess';
import api from 'api';
export default api.base.service({
name: 'foo',
read: function (req, resource, params, context, callback) {
switch(resource) {
case this.name:
callAndProcess(req, params, context, callback);
return;
}
const error = fumble.http.create(400, 'Passed in an invalid resource', {
debug: [resource]
});
req.error(error);
req.debug(error.stack); // nice stack trace
/**
* logs:
* { [HttpError: Bad Request] statusCode: 400, message:
* 'Passed in an invalid resource', debug: [ resource ] }
*/
callback(error);
}
});
API Docs
fumble.http
provides a set of utilities for returning HTTP errors. Each method returns an HttpError
instance, which itself extends the native Error
class (which means you can access the stack
prop on your error instance). Each error has the following two props:
-
statusCode
{Number} - the HTTP status code (typically 4xx or 5xx). -
message
{String} - the error message
fumble.http.create ([status=500], [message='Internal Server Error'], [options])
Generate an HttpError
object where:
-
statusCode
- an HTTP error code number. Must be greater or equal 400 -
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
const error = fumble.http.create(400, 'missing params', { debug: [passedInParams] });
HTTP 4xx Errors
fumble.http.badRequest ([message='Bad Request'], [options])
returns an HTTP status code of 400
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.badRequest('invalid query');
// essentially generates
{
statusCode: 400,
message: 'invalid query'
}
fumble.http.unauthorized ([message='Unauthorized'], [options])
returns an HTTP status code of 401
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.unauthorized('not logged in');
// essentially generates
{
statusCode: 401,
message: 'not logged in'
}
fumble.http.forbidden ([message='Forbidden'], [options])
returns an HTTP status code of 403
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.forbidden('top secret');
// essentially generates
{
statusCode: 403,
message: 'top secret'
}
fumble.http.notFound ([message='Not Found'], [options])
returns an HTTP status code of 404
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.notFound('does not exist');
// essentially generates
{
statusCode: 404,
message: 'does not exist'
}
fumble.http.methodNotAllowed ([message='Method Not Allowed'], [options])
returns an HTTP status code of 405
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.methodNotAllowed('not allowed');
// essentially generates
{
statusCode: 405,
message: 'not allowed'
}
fumble.http.proxyAuthenticationRequired ([message='Proxy Authentication Required'], [options])
returns an HTTP status code of 407
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.proxyAuthenticationRequired('need to login to foo');
// essentially generates
{
statusCode: 407,
message: 'need to login to foo'
}
fumble.http.conflict ([message='Conflict'], [options])
returns an HTTP status code of 409
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.conflict('collision detected');
// essentially generates
{
statusCode: 409,
message: 'collision detected'
}
fumble.http.gone ([message='Gone'], [options])
returns an HTTP status code of 410
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.gone('bye bye');
// essentially generates
{
statusCode: 410,
message: 'bye bye'
}
fumble.http.preconditionFailed ([message='Precondition Failed'], [options])
returns an HTTP status code of 412
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.preconditionFailed('missing CLA');
// essentially generates
{
statusCode: 412,
message: 'missing CLA'
}
fumble.http.tooManyRequests ([message='Too Many Requests'], [options])
returns an HTTP status code of 429
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.tooManyRequests('slow down');
// essentially generates
{
statusCode: 429,
message: 'slow down'
}
HTTP 5xx Errors
fumble.http.internalServerError ([message='Internal Server Error'], [options])
returns an HTTP status code of 500
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.internalServerError('unkown error');
// essentially generates
{
statusCode: 500,
message: 'unknown error'
}
===
fumble.http.notImplemented ([message='Not Implemented'], [options])
returns an HTTP status code of 501
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.notImplemented('missing enhancement');
// essentially generates
{
statusCode: 501,
message: 'missing enhancement'
}
fumble.http.badGateway ([message='Bad Gateway'], [options])
returns an HTTP status code of 502
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.badGateway('mongo error');
// essentially generates
{
statusCode: 502,
message: 'mongo error'
}
`fumble.http.serviceUnavailable ([message='Service Unavailable'], [options])
returns an HTTP status code of 503
-
message
- optional message string. -
options
- extra options -
options.debug
- additional error debug info set toerror.debug
property.
fumble.http.serviceUnavailable('feeds are down');
// essentially generates
{
statusCode: 503,
message: 'feeds are down'
}
License
This software is free to use under the Yahoo Inc. BSD license. See the LICENSE file for license text and copyright information.