UNPKG

http-error-middleware

Version:

A simple Express middleware to handle and format error messages, improving error management in your applications.

190 lines (130 loc) 6.73 kB
# http-error-middleware `http-error-middleware` is a package that simplifies error handling in Express applications. It provides an easy way to generate and manage specific HTTP errors using middleware, making your code clearer and ensuring a consistent structure for error responses. This package allows you to throw errors with specific HTTP status codes and custom messages, then handle them centrally in your application using a single middleware. ## Installation You can install the package from npm using the following command: ```bash npm install http-error-middleware ``` ## Basic Usage ### Set Up Middleware in Your Express Application First, you need to import and use the middleware provided by http-error-middleware in your Express app. ```typescript import express from 'express' // Import the package import { httpErrorMiddleware } from 'http-error-middleware' const app = express() // Define your app routes. app.get('/', (req, res) => { res.status(200).json({ message: 'Hello world' }) }) // Use the middleware to handle errors. app.use(httpErrorMiddleware()) // Other middleware for handling errors can go here. // Start the server. app.listen(3000, () => { console.log('Server running') }) ``` ### httpErrorMiddleware settings The middleware offers some configurations to customize the error response, which are optional. ```typescript import express from 'express' import { httpErrorMiddleware } from 'http-error-middleware' const app = express() //Other Express app config app.use(httpErrorMiddleware({ destructure: false, statusCodeOnResponse: false })) ``` - If you want the error details to be placed at the root of the response body, set the "destructure" flag to true. - If you want the status code sent to be in the response body, set the "statusCodeOnResponse" flag to true. The default settings is as follows: ```json { "destructure": false, "statusCodeOnResponse": true } ``` ### Throw Errors Where You Need Them You can throw HTTP errors anywhere in your application using the HttpError class provided by the package. Here's a simple example to throw a 400 Bad Request error. ```typescript import { HttpError } from 'http-error-middleware' if (condition) throw HttpError.badRequest('Email and/or password are wrong') ``` This code will throw an error that gets handled by the middleware, and the response will look like this: ```json { "message": "Email and/or password are wrong", "statusCode": 400 // This property will be removed this if you set the "statusCodeOnResponse" flag to false. } ``` ### Errors with Additional Details If you need to send more details with the error (e.g., information about which form field is incorrect), you can do it like this: ```typescript import { HttpError } from 'http-error-middleware' if (condition) HttpError.badRequest('Email and/or password are wrong', { fieldName: "Error message", ...moreErrors }) ``` This will generate a response with additional error details: ```json { "message": "Email and/or password are wrong", "details": { "fieldName": "Error message", "fieldName2": "Error message" }, "statusCode": 400 // This property will be removed this if you set the "statusCodeOnResponse" flag to false. } ``` If you have the "destructure" flag set, the message will be displayed like this: ```json { "message": "Email and/or password are wrong", "fieldName": "Error message", "fieldName2": "Error message", "statusCode": 400 // This property will be removed this if you set the "statusCodeOnResponse" flag to false. } ``` ## Available HTTP Error Methods The package provides methods to generate common HTTP errors with specific status codes. Here are the available methods: ### Client Errors (4xx) - `HttpError.badRequest(message: string, details?: object)` - Throws a `400 Bad Request` error with the provided message and optional details. - `HttpError.unauthorized(message: string, details?: object)` - Throws a `401 Unauthorized` error with the provided message and optional details. - `HttpError.paymentRequired(message: string, details?: object)` - Throws a `402 Payment Required` error with the provided message and optional details. - `HttpError.forbidden(message: string, details?: object)` - Throws a `403 Forbidden` error with the provided message and optional details. - `HttpError.notFound(message: string, details?: object)` - Throws a `404 Not Found` error with the provided message and optional details. - `HttpError.methodNotAllowed(message: string, details?: object)` - Throws a `405 Method Not Allowed` error with the provided message and optional details. - `HttpError.notAcceptable(message: string, details?: object)` - Throws a `406 Not Acceptable` error with the provided message and optional details. - `HttpError.proxyAuthenticationRequired(message: string, details?: object)` - Throws a `407 Proxy Authentication Required` error with the provided message and optional details. - `HttpError.requestTimeOut(message: string, details?: object)` - Throws a `408 Request Timeout` error with the provided message and optional details. - `HttpError.conflict(message: string, details?: object)` - Throws a `409 Conflict` error with the provided message and optional details. ### Server Errors (5xx) - `HttpError.internalServerError(message: string, details?: object)` - Throws a `500 Internal Server Error` with the provided message and optional details. - `HttpError.notImplemented(message: string, details?: object)` - Throws a `501 Not Implemented` error with the provided message and optional details. - `HttpError.badGateway(message: string, details?: object)` - Throws a `502 Bad Gateway` error with the provided message and optional details. - `HttpError.serviceUnavailable(message: string, details?: object)` - Throws a `503 Service Unavailable` error with the provided message and optional details. - `HttpError.gatewayTimeOut(message: string, details?: object)` - Throws a `504 Gateway Timeout` error with the provided message and optional details. ### Custom Error - `HttpError.custom(message: string, statusCode: number, details?: object)` - Throws a custom error with a specified `statusCode` (for errors not covered by the predefined methods) and optional details. Each of these methods generates a response with an appropriate HTTP status code, a message, and optionally, additional details. ## Benefits Consistency: Centralize error handling in a single middleware. Clarity: Easily create and throw HTTP errors with clear and specific messages. Extensibility: Add additional details to errors to provide more context, such as information about specific fields.