restful_express_router
v0.0.3
Published
This is a simple function which takes a config object along with a mongoose model and return an express-router with a restful api
Downloads
9
Readme
restful_express_router
The restful_express_router provides a simple class (RestfulExpressRouter) that takes a Mongoose model and returns a RESTful Express router. It simplifies the process of creating RESTful APIs for your Mongoose models with built-in CRUD operations.
Features
- Automatically generates RESTful routes for standard CRUD operations.
- Option to add global middleware for authentication, logging, etc.
- Pagination, sorting, and filtering capabilities for list queries.
Installation
You can install the package using npm:
npm install restful_express_router
Usage Example Here's a simple example of how to use the expressRestRouter in your Express application:
require('dotenv').config();
const db = require("./mongo.js"); // Database connection
const mongoose = require('mongoose');
const express = require('express');
//-- here it uses index.js but you have to use restful_express_router
const RestfulRouter = require('./index.js');
const app = express();
app.use(express.json());
// Define a simple Mongoose model
const UserSchema = new mongoose.Schema({
email: String,
password: String,
});
const User = mongoose.model('User', UserSchema);
// Create a RESTful router for the User model
let restfulRouter = new RestfulRouter(User);
// Use the RESTful router for the '/users' endpoint
app.use('/users', restfulRouter.getRouter());
app.get('/', (req, res) => res.status(200).json({ message: "Welcome to ExpressRestRouter 0.0.1" }));
// Start the server
const PORT = 5000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
API Manual
For example, you can specify middleware for the GET, POST, PUT, and DELETE routes independently, ensuring that each route handles its unique logic and authorization requirements.
Advance Example
require('dotenv').config();
const db = require("./mongo.js");
const mongoose = require('mongoose');
const express = require('express');
const RestfulExpressRouter = require('./index.js');
const jwt = require('jsonwebtoken');
const login = require('./src/login.js');
const UserSchema = require('./src/UserSchema.js');
const User = mongoose.model('User', UserSchema);
//////////////////////////////
const app = express();
app.use(express.json());
//==Middlewhere
const logRequest = (req, res, next) => {
// debugger;
console.log(`Request Method: ${req.method}, URL: ${req.url}`);
next(); // Proceed to the next middleware or route handler
};
// Middleware for Auth
const authenticateJWT = (req, res, next) => {
debugger;
const token = req.headers['authorization']?.split(' ')[1];
if (!token) {
return res.sendStatus(403); // Forbidden if no token
}
jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
if (err) {
console.log(`Verified: ${req.method}, URL: ${req.url}`);
return res.sendStatus(403); // Forbidden if token is not valid
}
req.user = user; // Save user info in request object
next(); // Proceed to the next middleware or route handler
});
};
///////////////////////////////////////////////
let restfulExpressRouter = new RestfulExpressRouter(User);
restfulExpressRouter.middlewareForList = [logRequest];
restfulExpressRouter.middlewareForGetById = [logRequest];
restfulExpressRouter.middlewareForUpdate = [authenticateJWT];
restfulExpressRouter.addExtraRoute(
{
method: 'post',
path: '/login',
middlewares: [], // Optional: add any middlewares
handler: async function(req, res) {
debugger;
const rez = await login(req,res);
return rez;
// res.status(200).json({ message: 'This is an additional route (login)' });
}
}
);
////----Here it all comes together
app.use('/users', restfulExpressRouter.getRouter());
app.get('/', (req, res) => res.status(200).json({ message: "Welcome to ExpressRestRouter 0.0.1" }));
// Start the server
const PORT = 5000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Error Handling
The library provides standard error responses:
- 404: Item not found
- 500: Internal server error
License
This project is licensed under the MIT License.
Author
Bilal Tariq