cubeforall-dbconnection

1.1.4 • Public • Published

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

Package Sidebar

Install

npm i cubeforall-dbconnection

Weekly Downloads

10

Version

1.1.4

License

ISC

Unpacked Size

12.6 kB

Total Files

5

Last publish

Collaborators

  • cube_platform_ccn