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

express-session搭配connect-mongo 4.x使用报con.db is not a function错如何解决

问题原因

这个报错是因为你给MongoStore.create()传入的client参数不符合connect-mongo 4.x的要求:client参数需要接收MongoDB原生驱动的MongoClient实例,而你传入的是Mongoose的connection对象,二者类型不匹配,导致内部调用con.db()方法失败。

解决方案

有两种常用的正确配置方式,选择其中一种即可:

方案1:使用Mongoose专属配置项(适配你当前的代码结构,操作最简单)

把原来的client: connection替换为mongooseConnection: connection,这是connect-mongo 4.x专门为Mongoose用户提供的参数,直接接收Mongoose的连接对象即可。
修改后的完整代码:

const MongoStore = require('connect-mongo');

const connectDB = require('./config/db');
const { connection } = require('mongoose');
app.use(
  session({
    secret: 'some secret',
    resave: false,
    saveUninitialized: true,
    store: MongoStore.create({
      // 替换为mongooseConnection参数
      mongooseConnection: connection,
      // 可选配置:指定session存储的集合名,默认值为sessions
      collectionName: 'sessions'
    }),
    cookie: {
      maxAge: 1000 * 60 * 60 * 24,
    },
  })
);

方案2:直接传入MongoDB连接字符串

如果不需要复用现有Mongoose连接,也可以直接传入mongoUrl参数,connect-mongo会自行创建数据库连接,不需要额外引入Mongoose的连接对象:

store: MongoStore.create({
  mongoUrl: '你的MongoDB连接地址,示例:mongodb://localhost:27017/你的数据库名',
  collectionName: 'sessions'
})
注意事项

确保Mongoose的连接已经成功建立之后再初始化session中间件,避免出现连接未就绪的异常。如果你的connectDB是异步初始化的,可以在数据库连接成功的回调里再挂载session中间件。

内容的提问来源于stack exchange,提问作者Tezz Bhandari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:51:03