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

Passport.js配置session保存时出现Cannot init client错误如何解决?

错误原因

你使用了v4及以上版本的connect-mongo依赖包,但仍沿用v3版本的配置写法,是导致该报错的核心原因:

  • v4版本后connect-mongo不再支持mongooseConnection配置项
  • 不再支持将错误回调作为第二个参数传入MongoStore构造函数
  • 初始化方式从new MongoStore()改为调用静态方法MongoStore.create(),配置参数结构完全调整
修复方案

根据你的使用场景选择对应写法即可:

方案1:复用已有的mongoose连接

如果你已经提前通过mongoose.connect()完成了数据库连接,想直接复用该连接,修改配置如下:

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

// 初始化session存储实例
const sessionStore = MongoStore.create({
    client: db.getClient(), // 此处db为你原有代码中的mongoose连接实例
    autoRemove: 'disabled'
});

// 监听连接状态替代原有回调
sessionStore.on('connect', () => console.log('connect-mongodb setup ok'));
sessionStore.on('error', (err) => console.log(err));

app.use(session({
    name: 'codeial',
    // TODO 生产环境部署前修改secret
    secret: 'blah blah',
    saveUninitialized: false,
    resave: false,
    cookie: {
        maxAge: (1000 * 60 * 100)
    },
    store: sessionStore
}));

方案2:独立创建MongoDB连接

如果你不需要复用现有mongoose连接,可以直接传入数据库地址让connect-mongo自行建立连接,写法更简洁:

const sessionStore = MongoStore.create({
    mongoUrl: 'mongodb://localhost:27017/你的数据库名称', // 替换为实际的MongoDB连接地址
    autoRemove: 'disabled'
});

内容的提问来源于stack exchange,提问作者Vasu Parbhakar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:07