UNPKG

cubeforall-dbconnection

Version:

A centralized MongoDB connection handler with connection pooling and graceful shutdown support.

184 lines (132 loc) β€’ 4.82 kB
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