Nodejs connect-mongo.js:28 TypeError: Cannot read property 'Store' of undefined 遇到这种问题基本都是由于版本问题导致的

Nodejs connect-mongo.js:28 TypeError: Cannot read property ‘Store’ of undefined 遇到这种问题基本都是由于版本问题导致的

connect-mongo.js:28 TypeError: Cannot read property ‘Store’ of undefined 遇到这种问题基本都是由于版本问题导致的,解决办法如下 只要在app.js这个文件中var MongoStore = require(‘connect-mongo’);这行改成var MongoStore = require(‘connect-mongo’)(express);就可以了,如果还不行就把connect-mongo这个模块里的Readme.md文件的 var MongoStore = require(‘connect-mongo’);改成var MongoStore = require(‘connect-mongo’)(express);就可以了


3 回复

Nodejs connect-mongo.js:28 TypeError: Cannot read property ‘Store’ of undefined

当你在使用 connect-mongo 模块时遇到 TypeError: Cannot read property 'Store' of undefined 错误,通常是因为 connect-mongo 和你的 Express 版本不兼容。解决这个问题的方法主要是确保 connect-mongo 正确地引用了 Express。

示例代码

假设你有一个简单的 Express 应用程序,并且你希望使用 connect-mongo 来管理会话存储。你可以按照以下步骤进行修改:

  1. 安装依赖

    确保你已经安装了 express-sessionconnect-mongo

    npm install express express-session connect-mongo
    
  2. 修改 app.js 文件

    在你的 app.js 文件中,你需要确保 connect-mongo 正确地引用了 Express。以下是修改后的代码示例:

    const express = require('express');
    const session = require('express-session');
    const MongoStore = require('connect-mongo')(session); // 这里需要传递 session
    
    const app = express();
    
    app.use(session({
      secret: 'your-secret-key',
      resave: false,
      saveUninitialized: false,
      store: new MongoStore({ 
        url: 'mongodb://localhost:27017/session-db' 
      })
    }));
    
    app.get('/', (req, res) => {
      res.send('Session is working!');
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    
  3. 修改 connect-mongo 源码(可选)

    如果上述方法仍然不起作用,你可以直接修改 connect-mongo 模块中的源码。找到 node_modules/connect-mongo/index.js 文件,并将:

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

    修改为:

    var MongoStore = require('connect-mongo')(session);
    

    这样可以确保 MongoStore 能够正确地识别并处理 Express 的会话对象。

通过以上步骤,你应该能够解决 TypeError: Cannot read property 'Store' of undefined 的问题。如果问题依然存在,请检查 connect-mongoexpress-session 的版本是否兼容。


我今天做的时候遇到了这个问题,当时也很纠结的

当使用 connect-mongo 模块时,遇到 TypeError: Cannot read property 'Store' of undefined 错误通常是由于版本兼容性问题导致的。具体来说,connect-mongo 在较新的版本中可能不再直接提供 MongoStore 类,而是需要通过传递 express-session 实例来创建。

示例代码

假设你正在使用 Express 和 connect-mongo,以下是如何正确配置 connect-mongo 的示例:

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

const app = express();

app.use(session({
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: false,
  store: new MongoStore({ 
    url: 'mongodb://localhost:27017/session-db'
  })
}));

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

解释

  • require('connect-mongo')(session) 会返回一个函数,该函数在被调用时会返回一个 MongoStore 类。
  • 使用 new MongoStore({...}) 创建一个新的存储实例,并将其传递给 express-sessionstore 选项。

如果问题仍然存在

  1. 检查依赖版本:确保你的 connect-mongo 版本与当前使用的其他模块(如 express-session)兼容。
  2. 阅读文档:查阅 connect-mongo 的最新文档,以确认是否需要调整配置或导入方式。
  3. 更新库:尝试更新 connect-mongo 到最新版本,有时问题可能是由已知的 bug 导致的,这些 bug 可能在新版本中已被修复。

希望这些步骤能帮助你解决问题!

回到顶部