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
相关产品推荐
相关产品推荐

