connect-mongo在MongoDB Atlas中误建test库,如何指定nodeblog_online存储会话?
解决connect-mongo在MongoDB Atlas下错误创建test数据库的问题
问题说明
使用connect-mongo和express-session存储会话时,本地MongoDB环境下会话集合能正常存入指定数据库,但切换到MongoDB Atlas后,中间件会自动创建名为test的新数据库并存放会话集合,需要将会话集合存入nodeblog_online数据库。
问题原因
express-session顶层配置中的dbName参数并不会被connect-mongo读取,connect-mongo仅识别自身配置项中的数据库参数。当连接MongoDB Atlas时,若connect-mongo未指定dbName,且连接字符串未明确数据库,就会默认使用test数据库存储会话。
解决方案
方案一:在connect-mongo配置中指定目标数据库
修改app.js中的session配置,将dbName移至connect-mongo的创建参数内:
const express = require('express'); const app = express(); const mongoose = require('mongoose'); const session = require('express-session'); const connectMongo = require('connect-mongo'); const dotenv = require('dotenv'); const conn = require('./db'); dotenv.config(); conn(); app.use(session({ secret: 'testo', resave: false, saveUninitialized: true, store: connectMongo.create({ mongoUrl: process.env.DB_URL, dbName: 'nodeblog_online' // 明确指定会话存储的数据库 }) }));
方案二:复用Mongoose已建立的连接
由于你已经通过db.js中的conn()函数连接了nodeblog_online数据库,可让connect-mongo复用该连接,无需重复指定数据库:
const express = require('express'); const app = express(); const mongoose = require('mongoose'); const session = require('express-session'); const connectMongo = require('connect-mongo'); const dotenv = require('dotenv'); const conn = require('./db'); dotenv.config(); conn(); app.use(session({ secret: 'testo', resave: false, saveUninitialized: true, store: connectMongo.create({ mongooseConnection: mongoose.connection // 复用已有的Mongoose连接 }) }));
验证
修改后重启服务,会话集合将会自动创建在nodeblog_online数据库中,不会再生成test数据库。
内容的提问来源于stack exchange,提问作者codex
相关产品推荐
相关产品推荐

