UNPKG

grom-utils

Version:

A lightweight utility package for simplified error handling, validation, and API responses.

167 lines (104 loc) 4.58 kB
# grom-utils A utility package for Express.js applications offering simplified async handling, error responses, validation, rate limiting, and logging. ## 🚀 Overview Grom is a powerful utility package designed to enhance Express.js applications by providing a standardized approach to error handling, input validation, rate limiting, structured responses, and logging. It simplifies backend development by enforcing best practices and reducing boilerplate code. ## ❓ Problem Statement Developers often face repetitive tasks in Express.js applications, such as: - Handling async errors properly. - Validating user input against expected schemas. - Preventing API abuse with rate limiting. - Standardizing API responses. - Implementing structured logging. Grom solves these problems by offering a robust, modular utility class that integrates seamlessly into Express.js applications. ## 📦 Installation ```bash npm install grom-utils ``` ## Features - **Async Handler**: Wrap async functions to catch errors. - **Error Checker**: Throw custom API errors with ease. - **API Responses**: Standard and paginated API responses. - **Input Validation**: Schema-based input validation. - **Rate Limiting**: Simple middleware to limit requests per IP. - **Logging**: Colorful, timestamped logs. ## 🛠 Usage ### 1. Async Error Handling (grAsyncHandler) **Problem**: Handling errors in async Express.js routes requires repetitive try-catch blocks. **Solution**: Grom wraps async functions to automatically catch errors and forward them to Express middleware. **Example**: ```javascript import { grAsyncHandler } from "grom-utils"; app.get("/data", grAsyncHandler(async (req, res) => { const data = await fetchData(); // Assume async function res.json({ success: true, data }); })); ``` ### 2. Schema-Based Input Validation (grValidate) **Problem**: Manually checking request payloads for type mismatches is tedious and error-prone. **Solution**: Grom validates data against a predefined schema and throws an error if mismatched. **Example**: ```javascript import { grValidate } from "grom-utils"; const userSchema = { name: "string", age: "number" }; app.post("/register", (req, res) => { grValidate(userSchema, req.body); res.json({ message: "User registered successfully" }); }); ``` ### 3. API Response Standardization (grResponse) **Problem**: API responses often lack consistency in structure and formatting. **Solution**: Grom provides a standard response format with status codes, messages, and metadata. **Example**: ```javascript import { grResponse } from "grom-utils"; app.get("/status", (req, res) => { res.json(grResponse(200, { status: "OK" }, "Service is running")); }); ``` ### 4. Custom Error Checking (grCheck) **Problem**: Developers often need to enforce custom conditions before proceeding. **Solution**: Grom throws an API error if a condition is false. **Example**: ```javascript import { grCheck } from "grom-utils"; app.post("/order", (req, res) => { grCheck(req.body.items.length > 0, 400, "Order cannot be empty"); res.json({ message: "Order placed successfully" }); }); ``` ### 5. Rate Limiting Middleware (grRateLimit) **Problem**: APIs are vulnerable to abuse through excessive requests. **Solution**: Grom limits requests per IP address within a specified time window. **Example**: ```javascript import { grRateLimit } from "grom-utils"; app.use(grRateLimit(5, 10000)); // Max 5 requests per 10 sec ``` ### 6. Structured Logging (grLogger) **Problem**: Logs are often unstructured, making debugging difficult. **Solution**: Grom provides color-coded logs with timestamps. **Example**: ```javascript import { grLogger } from "grom-utils"; grLogger("info", "Server started on port 3000"); ``` ## Functions - `grAsyncHandler` - `grCheck` - `grResponse` - `grValidate` - `grRateLimit` - `grLogger` ## 🎯 Why Use Grom? - ✅ Reduces repetitive boilerplate code. - ✅ Improves API security and reliability. - ✅ Enforces best practices in Express.js. - ✅ Easy integration into existing projects. ## 📜 License MIT License ## 📞 Support For issues and feature requests, open an issue on GitHub. Dhruv Sharma ([[@dhruv-sharma007](https://github.com/dhruv-sharma007)]) ## 👥 Contributors Jasraj Chouhan ([[@Jasraj Chouhan](https://github.com/JasrajChouhan)]) Become contributor in this project