You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复用已建立的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:57:03