Express与connect-mongo报错:MongoStore构造函数需用new调用求解决
问题定位与解决方案
错误原因
你遇到的TypeError: Class constructor MongoStore cannot be invoked without 'new'错误,核心是connect-mongo版本与代码写法不兼容:
- 你的代码采用了旧版connect-mongo(v3及以下)的调用方式:
require('connect-mongo')(session) - 但实际安装的是v4及以上版本,该版本的库导出逻辑已变更:不再需要传入
session参数,直接导出的就是MongoStore类,且实例化方式也有调整。
解决方案
提供两种可选方案:
方案1:适配connect-mongo新版本(推荐)
修改代码中MongoStore的引入和配置:
- 替换引入语句
// 旧代码 const MongoStore = require('connect-mongo')(session) // 新代码 const MongoStore = require('connect-mongo')
- 更新session配置中的store项
const sessionOptions = session({ secret: 'hdfkajdkk58fj', // 替换这一行 store: MongoStore.create({ mongoUrl: process.env.CONNECTIONSTRING }), resave: false, saveUninitialized: false, cookie: { maxAge: 1000 * 60 * 60 * 24 * 7, httpOnly: true } })
如果想复用已有的mongoose连接,也可以这样写:
store: MongoStore.create({ clientPromise: mongoose.connection.asPromise() })
方案2:回退到旧版connect-mongo
如果你想保持现有代码结构不变,可卸载当前版本,安装v3.x版本:
npm uninstall connect-mongo npm install connect-mongo@3
额外提示
代码中还有一处未引入依赖的问题:app.use(flash())需要先引入connect-flash包,否则会报错,需添加:
const flash = require('connect-flash')
内容的提问来源于stack exchange,提问作者gustavo_00
相关产品推荐
相关产品推荐

