在Node.js和Mongoose中创建动态MongoDB连接

yptwkmov  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(173)

我正在使用Mongoose和MongoDB进行Node.js项目,我有一个特定的用例,需要为不同的分支创建动态数据库连接。下面是我试图实现的目标:

  • 我有一个名为adminBranches的主数据库,它存储有关所有可用分支的信息。
  • 当一个用户登录时,我想获取该用户可用的分支列表。
  • 然后,用户应该能够选择要使用的分支,应用程序应该建立到相应的特定于分支的数据库的连接。
  • 选定的数据库连接应在用户会话期间存储在用户会话中。

我已经尝试建立一个全局连接,但我现在正在寻找如何为每个用户和分支创建这些动态连接的指导。有人能提供关于如何在Node.js和Mongoose中实现这一点的见解或代码示例吗?
现在我有了这样的联系:

// config variables
const PORT: string = config.get('PORT');
const MODE: string = config.get('MODE');
const SESSION_SECRET: string = config.get('SESSION_SECRET');
const CLIENT_DOMAIN: string = config.get('CLIENT_DOMAIN');
const ORDER_CLIENT_DOMAIN: string = config.get('ORDER_CLIENT_DOMAIN');
const AUTH_COOKIE_MAX_AGE: number = config.get('AUTH_COOKIE_MAX_AGE');
const mongoUrl: string = config.get('mongoURI');

const app = express();
const server = createServer(app);
const io = initializeSocketServer(server, {
    cors: {
        origin: [CLIENT_DOMAIN, ORDER_CLIENT_DOMAIN],
    },
});

//-----------------------------Middleware Start------------------//
connectDB();

字符串

xqnpmsa8

xqnpmsa81#

const { MongoClient } = require('mongodb');

// Object to store database connections
const dbConnections = {};

// Function to create or retrieve a database connection
async function getDbConnection(dbName) {
  if (dbConnections[dbName]) {
    // If the connection already exists, return it
    return dbConnections[dbName].db;
  }

  try {
    // If the connection doesn't exist, create a new one
    const url = `mongodb://localhost:27017/${dbName}`;
    const client = new MongoClient(url, { useNewUrlParser: true });
    await client.connect();
    const db = client.db(dbName);
    
    // Store the connection in the object
    dbConnections[dbName] = { client, db };

    return db;
  } catch (error) {
    console.error(error);
    throw error; // You may want to handle this error more gracefully in your application
  }
}

// Function to close a database connection
async function closeDbConnection(dbName) {
  if (dbConnections[dbName]) {
    const { client } = dbConnections[dbName];
    await client.close();
    delete dbConnections[dbName];
  }
}

// Example usage
async function exampleUsage(branchName='mydb') {
  const dbName = branchName;

  // Get a database connection
  const db = await getDbConnection(dbName);

  // Use the db object for database operations
  const collection = db.collection('mycollection');
  await collection.insertOne({ field: 'value' });

  // Close the database connection when done
  await closeDbConnection(dbName);
}

 const testBranchDb = 'testBranchDB'
exampleUsage(testBranchDb);

字符串
创建一个mongo db配置文件,并使用上面的代码根据提供的分支名称管理数据库连接,根据您的用例保持连接或关闭连接

相关问题