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);就可以了
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
来管理会话存储。你可以按照以下步骤进行修改:
-
安装依赖
确保你已经安装了
express-session
和connect-mongo
:npm install express express-session connect-mongo
-
修改 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'); });
-
修改
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-mongo
和 express-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-session
的store
选项。
如果问题仍然存在
- 检查依赖版本:确保你的
connect-mongo
版本与当前使用的其他模块(如express-session
)兼容。 - 阅读文档:查阅
connect-mongo
的最新文档,以确认是否需要调整配置或导入方式。 - 更新库:尝试更新
connect-mongo
到最新版本,有时问题可能是由已知的 bug 导致的,这些 bug 可能在新版本中已被修复。
希望这些步骤能帮助你解决问题!