Mongoose仅连接单个数据库而非两个的问题排查咨询
多Mongoose数据库连接问题分析与解决方案
没错,你的问题确实出在mongoose.connect()的调用方式和对mongoose.connection的赋值逻辑上。
Mongoose的默认连接是单例模式——当你连续调用两次mongoose.connect()时,第二次调用会直接覆盖第一次创建的全局连接实例。这就导致第一个数据库的连接被直接丢弃,最后只有第二次连接的数据库能被正常访问。而且你先后赋值的connection和userDb,最后其实都指向了第二个数据库的连接对象,第一个数据库的连接根本没被保留下来。
要解决多数据库连接的问题,你需要使用mongoose.createConnection()来创建独立的连接实例,而不是复用全局的mongoose.connect()。每个createConnection()返回的都是独立的连接对象,不会互相覆盖。
修改后的代码示例如下:
// 创建第一个数据库的独立连接 const connection = mongoose.createConnection('mongodb://someOtherDb', { useNewUrlParser: true, useCreateIndex: true }); connection.on('open', () => { console.log("First database connected") }); connection.on('error', () => { console.log("Error connecting to first database") }); // 创建第二个数据库的独立连接 const userDb = mongoose.createConnection('mongodb://localhost:27017/users', { useNewUrlParser: true, useCreateIndex: true }); userDb.on('error', console.error.bind(console, 'User database connection error:')); // 会话存储使用第二个数据库的连接 app.use(session({ secret: 'top secret!', saveUninitialized: false, resave: true, store: new MongoStore({ mongooseConnection: userDb }) }));
后续定义模型时,也要对应使用各自的连接实例:
// 第一个数据库的模型 const SomeOtherModel = connection.model('SomeOtherModel', yourOtherSchema); // 用户数据库的模型 const UserModel = userDb.model('User', userSchema);
这样两个数据库的连接和操作就完全独立,不会再出现只有一个数据库能访问的问题了。
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

