CubeforAll MongoDB Connection Wrapper 🚀 A standardized wrapper to handle multiple MongoDB Atlas connections (with Mongoose or native driver) easily, ensuring your company never directly uses mongoose or mongodb libraries.
📦 Installation
npm install cubeforall-dbconnection 🔧 Features 🔌 Multiple Database Connections (e.g., platformMongo, boxMongo)
♻️ Connection Pooling & Reuse
✅ Graceful Shutdown Handling
🏗️ Schema Export (Mongoose) Ready
🚀 Native MongoDB Methods & Mongoose Compatibility
🌐 Usage Example 1️⃣ Connection Setup
=============================================
MongoDB
const express = require('express'); const bodyParser = require('body-parser'); const { connectMongoDB, closeAllConnections } = require('cubeforall-dbconnection'); const userController = require('./controllers/user.controller');
const app = express(); app.use(bodyParser.json());
// Initialize multiple connections at startup (async () => { await connectMongoDB('platformMongo', process.env.PLATFORM_MONGO_URI); await connectMongoDB('boxMongo', process.env.BOX_MONGO_URI); })();
// Routes: pass db name to controller app.get('/platform/users', (req, res) => userController.getUsers(req, res, 'platformMongo')); app.get('/box/users', (req, res) => userController.getUsers(req, res, 'boxMongo'));
process.on('SIGINT', async () => { await closeAllConnections(); process.exit(); });
app.listen(3000, () => console.log('🚀 Server running on port 3000'));
============================================= Mongoose
const express = require('express'); const bodyParser = require('body-parser'); const { connectToMongoAtlas, getConnection, closeAllConnections, } = require('cubeforall-dbconnection'); const { createUserHandler, getUsersHandler } = require('./controllers/user.controller');
const app = express(); app.use(bodyParser.json());
// Initialize Multiple Connections (async () => { await connectToMongoAtlas('platformMongo', process.env.PLATFORM_MONGO_URI); await connectToMongoAtlas('boxMongo', process.env.BOX_MONGO_URI); })();
// Routes Example app.post('/platform/users', async (req, res) => { const conn = getConnection('platformMongo'); await createUserHandler(req, res, conn); });
app.get('/box/users', async (req, res) => { const conn = getConnection('boxMongo'); await getUsersHandler(req, res, conn); });
// Graceful Shutdown process.on('SIGINT', async () => { await closeAllConnections(); process.exit(); });
app.listen(3000, () => console.log('🚀 Server running on port 3000')); 2️⃣ Schema Example (Mongoose) Inside models/user.model.js:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({ name: { type: String, required: true }, email: { type: String, required: true, unique: true }, age: Number, }, { timestamps: true });
// Export function that binds schema to specific connection function getUserModel(connection) { return connection.model('User', userSchema); }
module.exports = { getUserModel }; 3️⃣ Service Example Inside services/user.service.js:
const { getUserModel } = require('../models/user.model');
async function createUser(connection, userData) { const User = getUserModel(connection); const newUser = new User(userData); return await newUser.save(); }
async function getAllUsers(connection) { const User = getUserModel(connection); return await User.find({}); }
module.exports = { createUser, getAllUsers }; 4️⃣ Controller Example Inside controllers/user.controller.js:
const { createUser, getAllUsers } = require('../services/user.service');
async function createUserHandler(req, res, connection) { try { const user = await createUser(connection, req.body); res.status(201).json(user); } catch (err) { res.status(500).json({ error: err.message }); } }
async function getUsersHandler(req, res, connection) { try { const users = await getAllUsers(connection); res.json(users); } catch (err) { res.status(500).json({ error: err.message }); } }
module.exports = { createUserHandler, getUsersHandler }; 5️⃣ Graceful Shutdown Handling No extra setup needed—your package automatically handles:
process.on('SIGINT', async () => { await closeAllConnections(); process.exit(); }); 💡 Benefits ✅ Company-wide standard MongoDB access pattern
✅ No more direct usage of mongoose or mongodb
✅ Easy connection handling for multi-tenant systems
✅ Supports MongoDB Native and Mongoose Schema
📜 License MIT License
cube-dashboard-stable v1.0.11
support-multiple-stable v1.0.15
new-version v1.1.2
mongoose v1.1.3