err-fixit
Version:
A single package to manage all errors in a MERN stack application
164 lines (118 loc) • 4.31 kB
Markdown
<p align="center">
<img src="https://img.shields.io/badge/Express.js-000000?style=for-the-badge&logo=express&logoColor=white" />
<img src="https://img.shields.io/badge/MERN-3C873A?style=for-the-badge&logo=mongodb&logoColor=white" />
<img src="https://img.shields.io/badge/Error%20Handling-FF5733?style=for-the-badge" />
<img src="https://img.shields.io/badge/API-0052CC?style=for-the-badge&logo=postman&logoColor=white" />
<img src="https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white" />
<img src="https://img.shields.io/badge/Open%20Source-0078D4?style=for-the-badge&logo=opensourceinitiative&logoColor=white" />
</p>
`err-fixit` is a lightweight and efficient npm package for handling various types of errors in a MERN stack application. It provides structured error responses for MongoDB, Express and general application errors. This package is designed to work seamlessly with both CommonJS and ES Modules.
- Handles duplicate key errors from MongoDB
- Handles Mongoose validation errors
- Handles cast errors (invalid ObjectId and so on)
- Provides a structured response with a `status: false` field
- Supports both CommonJS (`require`) and ES Modules (`import`)
## **Supported Errors**
| Error Type | Description |
| --------------------------------------- | ----------------------------------------------------------- |
| **Duplicate Key Error** (`code: 11000`) | Happens when inserting a duplicate value in a unique field. |
| **CastError** | Occurs when an invalid ObjectId or incorrect type is used. |
| **ValidationError** | Mongoose validation errors. |
| **Unknown Error** | Any other unhandled errors. |
## Installation
To install the package run:
```sh
npm i err-fixit
```
## Usage
### **For CommonJS (`require`)**
```js
const express = require("express");
const { errorHandler } = require("err-fixit");
const app = express();
app.get("/", (req, res, next) => {
const error = new Error("something went wrong!");
next(error);
});
app.use((err, req, res, next) => {
const errorResponse = errorHandler(err);
return res.status(errorResponse.errorCode || 500).json(errorResponse);
});
app.listen(3000, () => console.log("Server running on port 3000"));
```
First, ensure your `package.json` includes:
```json
{
"type": "module"
}
```
Then, use the following code:
```js
import express from "express";
import { errorHandler } from "err-fixit";
const app = express();
app.get("/", (req, res, next) => {
const error = new Error("something went wrong");
next(error);
});
app.use((err, req, res, next) => {
const errorResponse = errorHandler(err);
return res.status(errorResponse.errorCode || 500).json(errorResponse);
});
app.listen(3000, () => console.log("Server running on port 3000"));
```
If a duplicate key error occurs (e.g. a unique field constraint violation) the package will return:
```json
{
"status": false,
"message": "'email' must be unique",
"field": "email",
"errorCode": 11000
}
```
If an invalid ObjectId is used in a MongoDB query, the package will return:
```json
{
"status": false,
"message": "invalid value provided for field '_id'",
"field": "_id",
"errorCode": 400
}
```
If Mongoose validation fails, the package will return:
```json
{
"status": false,
"message": "validation failed",
"errors": [
{
"field": "email",
"message": "email is required"
}
],
"errorCode": 400
}
```
If an unknown error occurs, the package provides a general response:
```json
{
"status": false,
"message": "an unknown error occurred",
"errorCode": 500
}
```
This package is released under the [MIT](https://mit-license.org/) License.
Created by [Khaled Md Saifullah](https://github.com/km-saifullah)
Contributions are welcome! Feel free to submit a pull request or open an issue on GitHub.