An Interest In:
Web News this Week
- April 26, 2024
- April 25, 2024
- April 24, 2024
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
Multi-Tenancy with Nodejs and mongoDb
The main concept of multi-tenancy is privacy and data segregation, With MongoDB architecture ( Database and collections ). Its easy to allocate collection for tenants database
You should have a simple npm application setup and install mongoose
by running;
npm install mongoose --save
Implement a logic to handle MongoDB database connection and switching. In this scenario I will use two different approaches, switching between database's using useDb
and disconnect
and reconnect
( this is useful for test cases only )
Connect and disconnect approach
// mongoose import const Mongoose = require('mongoose')// a function that takes database name and database url as import and return a mongoose connectionconst connectDb = async (dbName, dbUrl) => {if (dbName === Mongoose.connection?.db?.databaseName) return Mongoose try { Mongoose.connection.close() const mongoose = await Mongoose.connect(dbUrl, { useNewUrlParser: true }) mongoose.connection.once('open', () => log.info(`mongodb connected to ${dbUrl}`) ) return mongoose } catch (error) { log.error(error) }}module.exports = { connectDb }
with the above usage, all we need is the database name and database URL, We check the database name to see if it's already open, if open we just return mongoose object else we close all open connections and reconnect to the database using the URL we passed in.
useDb(recommended) approach
// mongoose import const Mongoose = require('mongoose')// a function that takes database name and database url as import and return a mongoose connectionconst connectDb = async (dbName, dbUrl) => {if (dbName === Mongoose.connection?.db?.databaseName) return Mongoose try { if( Mongoose.readyState == 1 ) { return Mongoose.useDb(dbName) } else { const mongoose = await Mongoose.connect(dbUrl, { useNewUrlParser: true }) mongoose.connection.once('open', () => log.info(`mongodb connected to ${dbUrl}`) ) return mongoose.useDb(dbName)} } catch (error) { log.error(error) }}module.exports = { connectDb }
A very simple approach, with useDb
all we need is an open connection or create a new connection then return a new instance of MongoDB by passing the database name to the useDb
function from an open MongoDB connection. In other cases you might have separate models(schema) for tenants, Here is an example.
// connect to mongodbconst mongoose = await Mongoose.connect(dbUrl, { useNewUrlParser: true })// connect to prefer databaseconst db = mongoose.useDb(databaseName)// use model(schema) preferreddb.model(modelName, schema)
Keep tenants locked up!!
Original Link: https://dev.to/codesalley/multi-tenancy-with-nodejs-and-mongodb-3gn1
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To