如何在Express.js的server.js中连接两个不同MongoDB集群?
连接多个MongoDB集群到Express服务器的正确方法
问题分析
你之前的两种尝试都存在问题:
- 多次调用
mongoose.connect()会覆盖默认连接实例,最终只会保留最后一次的连接,无法同时维护两个集群的连接。 mongoose.createConnection()返回的是Connection实例而非Promise,所以不能直接链式调用.then(),需要通过事件监听处理连接状态。
解决方案代码示例
以下是正确实现双集群连接的代码,同时为每个连接绑定对应的数据模型:
const express = require("express"); const app = express(); const jwt = require("jsonwebtoken"); const fs = require('fs'); const mongoose = require("mongoose"); let refreshTokens = []; app.use(express.json()); // 第一个MongoDB集群:创建独立连接实例 const db1Connection = mongoose.createConnection( "mongodb+srv://Nacer:<password>@cluster0.fnv49eh.mongodb.net/?retryWrites=true&w=majority", { useNewUrlParser: true, useUnifiedTopology: true, } ); // 监听第一个连接的状态 db1Connection.on('connected', () => { console.log("Connecté à MongoDB 集群1"); }); db1Connection.on('error', (err) => { console.error("Erreur de connexion à MongoDB 集群1:", err); }); // 第二个MongoDB集群:创建另一个独立连接实例 const db2Connection = mongoose.createConnection( "mongodb+srv://nacereddine:<password>@cluster0.fnv49eh.mongodb.net/?retryWrites=true&w=majority", { useNewUrlParser: true, useUnifiedTopology: true, } ); // 监听第二个连接的状态 db2Connection.on('connected', () => { console.log("Connecté à MongoDB 集群2"); }); db2Connection.on('error', (err) => { console.error("Erreur de connexion à MongoDB 集群2:", err); }); // 为第一个集群定义模型(绑定到db1Connection) const userSchema = new mongoose.Schema({ id: String, username: String, email: String, password: String, isAdmin: Boolean, }); const UserDb1 = db1Connection.model("user", userSchema); // 若需为第二个集群定义模型,绑定到db2Connection即可 // const UserDb2 = db2Connection.model("user", userSchema);
核心要点
- 每个MongoDB集群对应一个独立的
mongoose.createConnection()实例,确保两个连接同时存在且互不干扰。 - 通过
connected和error事件监听连接状态,替代Promise链式调用。 - 定义数据模型时,必须使用对应集群的连接实例(如
db1Connection.model()),才能让模型绑定到指定集群。
内容的提问来源于stack exchange,提问作者Chouich Nacereddine
相关产品推荐
相关产品推荐

