@b9g/http-errors
HTTP error classes for consistent error handling.
HTTPError
Base class for all HTTP errors.
Constructor
new HTTPError(status: number, message?: string, options?: HTTPErrorOptions)
HTTPErrorOptions
interface HTTPErrorOptions {
cause?: Error;
headers?: Record<string, string>;
expose?: boolean;
}
Properties
| Property | Type | Description |
|---|---|---|
status | number | HTTP status code |
statusCode | number | Alias for status |
message | string | Error message |
expose | boolean | Expose message to clients |
headers | Record<string, string> | Custom headers |
cause | Error | Original error |
toJSON(): object
Serializes the error.
error.toJSON();
// { name, message, status, statusCode, expose }
toResponse(isDev?: boolean): Response
Converts to HTTP Response.
error.toResponse(); // Plain text
error.toResponse(true); // HTML with stack trace
Client Errors (4xx)
| Class | Status | Default Message |
|---|---|---|
BadRequest | 400 | Bad Request |
Unauthorized | 401 | Unauthorized |
Forbidden | 403 | Forbidden |
NotFound | 404 | Not Found |
MethodNotAllowed | 405 | Method Not Allowed |
Conflict | 409 | Conflict |
UnprocessableEntity | 422 | Unprocessable Entity |
TooManyRequests | 429 | Too Many Requests |
Server Errors (5xx)
| Class | Status | Default Message |
|---|---|---|
InternalServerError | 500 | Internal Server Error |
NotImplemented | 501 | Not Implemented |
BadGateway | 502 | Bad Gateway |
ServiceUnavailable | 503 | Service Unavailable |
GatewayTimeout | 504 | Gateway Timeout |
isHTTPError(value: unknown): value is HTTPError
Type guard for HTTP errors.
if (isHTTPError(error)) {
console.log(error.status);
}
Usage
import { NotFound, BadRequest } from "@b9g/http-errors";
throw new NotFound("User not found");
throw new BadRequest("Invalid email", {
headers: { "X-Error-Code": "INVALID_EMAIL" },
});
Exposure
4xx errors expose messages by default; 5xx errors don't.
throw new BadRequest("Invalid input"); // Exposed
throw new InternalServerError("DB failed"); // Hidden
throw new InternalServerError("Overloaded", { expose: true }); // Override
See Also
- Middleware - Error handling
- Router - Route handlers