如何复用已建立的mongoose数据库连接给MongoStore存储会话
解决方案
完全可以复用已有的Mongoose数据库连接,无需重复创建连接,connect-mongo原生支持直接复用Mongoose已建立的连接实例。
具体修改步骤
你只需要修改session配置里的store部分代码,不需要再传入mongoUrl和mongoOptions,改为直接传入Mongoose的连接实例即可,有两种常用写法:
写法1:直接传入底层Mongo客户端实例(推荐)
store: MongoStore.create({ // 直接复用Mongoose已经创建的数据库客户端 client: mongoose.connection.getClient(), collection: 'sessions' }),
写法2:传入Mongoose连接对象
store: MongoStore.create({ mongooseConnection: mongoose.connection, collection: 'sessions' }),
额外优化建议
如果要避免数据库连接未完成时session操作报错,可以将session中间件注册、路由注册、端口监听的逻辑都放到Mongoose连接成功的回调中:
mongoose.connect(process.env.DB_String, dbOptions) .then(() => { console.log("Connected to the databse....") // 连接成功后再注册session中间件和路由 app.use(session({ secret: process.env.Session_Secret, resave: true, store: MongoStore.create({ client: mongoose.connection.getClient(), collection: 'sessions' }), saveUninitialized: true, cookie: { maxAge: 1000 * 60 * 60 * 24 } })); app.use(passport.initialize()); app.use(passport.session()); app.use('/api/', require('./api/index')); app.use('*', (req, res) => { res.status(404).json({message: 'Route not found'}); }) app.listen(process.env.port, () => { console.log(`app is listening on port ${process.env.port}`); }); }) .catch(error => console.log('Error While Connecting to db', error));
修改后全局只会创建一条数据库连接,不会重复建立连接占用资源。
内容的提问来源于stack exchange,提问作者Vishal Gupta
相关产品推荐
相关产品推荐

