A highly customizable CRUD API generator for Mongoose models with built-in filtering, pagination, search, population and much more.
- 🚀 Auto-generate CRUD APIs for any Mongoose model.
- 🔐 Role-based permissions with middleware support.
- 🔎 Advanced query support (filters, search, sort, pagination, field selection, and population).
- 🪝 Pre and post hooks for customization.
- 📦 Fully compatible with Express.js.
Install the package using npm:
npm install mongoose-crud-generator
Or with yarn:
yarn add mongoose-crud-generator
const express = require("express");
const mongoose = require("mongoose");
const { generateCrudRoutes } = require("mongoose-crud-generator");
const User = require("./models/User"); // Example Mongoose model
const app = express();
app.use(express.json());
// Define API options
const options = {
authOptions: { authenticate: true, authMiddleware: require("./middlewares/auth") },
preHooksOptions: { getAll: async (req, res) => console.log("Pre Hook Triggered") },
postHooksOptions: { getAll: async (req, res, response) => response },
middlewareOptions: { customMiddleware: require("./middlewares/customMiddleware") },
};
// Generate routes
const userRoutes = generateCrudRoutes({ model: User, modelName: "User", ...options });
app.use("/users", userRoutes);
// Start server
app.listen(3000, () => console.log("Server running on port 3000"));
GET /users?page=1&limit=10&search=John&filter={"age":{"$gte":25}}
Query Parameters:
-
page
: Pagination (default:1
) -
limit
: Items per page (default:10
) -
search
: Search by name or custom fields -
filter
: JSON object for advanced filtering -
sort
: Sort the output in order (default:-updatedAt
) -
join
: Populate related fields (field(field1[field2,field3])
format) // () for nested joins and [] for selecting specific fields after join -
select
: Select specific fields (field1,field2
format)
GET /users/:id
POST /users
Content-Type: application/json
{
"name": "John Doe",
"email": "johndoe@example.com",
"age": 30
}
PUT /users/:id
Content-Type: application/json
{
"name": "John Updated",
"age": 31
}
DELETE /users/:id
DELETE /users/hard/:id
You can add authentication and role-based permissions with middleware:
const options = {
authOptions: { authenticate: true, authMiddleware: require("./middlewares/auth") }
};
Customize API logic using pre and post hooks:
const options = {
preHooksOptions: { getAll: async (req, res) => console.log("Pre Hook") },
postHooksOptions: { getAll: async (req, res, response) => response },
};
Use semantic versioning:
npm version patch # Bug fixes
npm version minor # New features
npm version major # Breaking changes
Pull requests are welcome! Open an issue for discussions.