@selfage/http_error
v1.1.2
Published
Error with HTTP status code.
Downloads
21
Readme
@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); // false
Minification & 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`);