@selfage/http_error v1.1.2
@selfage/http_error
Install
npm install @selfage/http_error
Overview
Written in TypeScript and compiled to ES6 with inline source map & source. See @selfage/tsconfig for full compiler options. Provides a simple HttpError class with status code, as well as taking an error as its cause based on @selfage/nested_error.
HttpError
You can create a HttpError as the following, while the third argument is optional.
import { StatusCode, HttpError } from '@selfage/http_error';
throw new HttpError(
StatusCode.InternalServerError,
"Something weird",
new Error("File system error")
);It will output the following, omitting details.
500 HttpError: Something weird
at Object.<anonymous> (.../http_error/temp.js:4:7)
...
Caused by: Error: File system error
at Object.<anonymous> (.../http_error/temp.js:4:88)
...Note that HttpError doesn't provide any default error message, but only status and statusCode properties which are equivalent and are of enum type StatusCode, mapping to standard HTTP status code.
enum StatusCode {
BadRequest = 400,
Unauthorized = 401,
PaymentRequired = 402,
Forbidden = 403,
NotFound = 404,
MethodNotAllowed = 405,
NotAcceptable = 406,
ProxyAuthenticationRequired = 407,
RequestTimeout = 408,
Conflict = 409,
Gone = 410,
LengthRequired = 411,
PreconditionFailed = 412,
PayloadTooLarge = 413,
URITooLong = 414,
UnsupportedMediaType = 415,
RangeNotSatisfiable = 416,
ExpectationFailed = 417,
ImATeapot = 418,
MisdirectedRequest = 421,
UnprocessableEntity = 422,
Locked = 423,
FailedDependency = 424,
UnorderedCollection = 425,
UpgradeRequired = 426,
PreconditionRequired = 428,
TooManyRequests = 429,
RequestHeaderFieldsTooLarge = 431,
UnavailableForLegalReasons = 451,
InternalServerError = 500,
NotImplemented = 501,
BadGateway = 502,
ServiceUnavailable = 503,
GatewayTimeout = 504,
HTTPVersionNotSupported = 505,
VariantAlsoNegotiates = 506,
InsufficientStorage = 507,
LoopDetected = 508,
BandwidthLimitExceeded = 509,
NotExtended = 510,
NetworkAuthenticationRequired = 511,
}Factories
To save a bit typing, you might use factory functions which are named after new<StatusCode name>Error().
import { newForbiddenError } from '@selfage/http_error';
throw newForbiddenError('Not allowed.', new Error('Invalid'));Client vs server error
Client error is HttpError with 4xx status code suggesting the error should be fixed on the client-side. And server error on the other hand is with 5xx status code indicating a bug on the server-side. We provide simple helper functions to tell them apart.
import {
isClientError,
isClientErrorCode,
isServerError,
isServerErrorCode
} from '@selfage/http_error';
let e = newForbiddenError('Not allowed.');
isClientError(e); // true
isClientErrorCode(e.statusCode); // true
isServerError(e); // false
isServerErrorCode(e.statusCode); // falseMinification & subclass
See @selfage/nested_error#Minification.
Compatibility
See @selfage/nested_error#ompatibility.
Test matcher
Provides an implementation of test matcher to be used with @selfage/test_matcher.
import { newForbiddenError } from '@selfage/http_error';
import { eqHttpError } from '@selfage/http_error/test_matcher';
import { assertThat } from '@selfage/test_matcher';
let actualError = newForbiddenError('Some long message');
assertThat(actualError, eqHttpError(newForbiddenError('long message')), `error`);