cubeforall-dbconnection
Version:
A centralized MongoDB connection handler with connection pooling and graceful shutdown support.
184 lines (132 loc) β’ 4.82 kB
Markdown
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