Nodejs require('connect-mongo'); 注册登录Session时报错
Nodejs require(‘connect-mongo’); 注册登录Session时报错
var Store = connect.Store || connect.session.Store; ^ TypeError: Cannot read property ‘Store’ of undefined
好的,让我们来分析一下这个问题。根据你提供的错误信息,看起来你在使用 connect-mongo 模块时遇到了一个类型错误(TypeError),具体是因为无法读取未定义对象的 Store 属性。
原因分析
这个错误通常发生在以下几种情况之一:
- 未正确安装或导入依赖:确保你已经正确安装了
express-session和connect-mongo。 - 版本兼容性问题:确保你使用的
express-session和connect-mongo版本之间是兼容的。
解决方案
首先,确保你已经安装了所需的依赖项:
npm install express express-session 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' // 替换为你的MongoDB连接字符串
})
}));
app.get('/', (req, res) => {
req.session.views = (req.session.views || 0) + 1;
res.send(`You have viewed this page ${req.session.views} times.`);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
详细说明
-
引入必要的模块:
express:用于创建Web应用。express-session:用于处理会话。connect-mongo:用于将会话存储在MongoDB中。
-
配置会话中间件:
secret:用于签名会话cookie的密钥。resave和saveUninitialized:分别表示是否重新保存未修改的会话,以及是否保存尚未初始化的会话。store:指定会话存储的方式,这里使用MongoStore将会话数据存储到MongoDB中。
-
路由处理:
- 在根路径
/上增加一个简单的路由,用于展示访问次数。
- 在根路径
通过以上步骤,你应该能够解决 TypeError: Cannot read property 'Store' of undefined 的问题,并成功使用 connect-mongo 来存储会话数据。如果问题仍然存在,请检查你的依赖版本是否匹配,或者查看是否有其他环境问题。
直接查google: var MongoStore = require(‘connect-mongo’); 这一行改成 var MongoStore = require(‘connect-mongo’)(express); 希望帮到你
我之前就是用的 var MongoStore = require(‘connect-mongo’)(express);会报下面提示错误,说是这个包不依赖express
Error: Most middleware (like session) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middl eware.
求解决方案!!!
嗯 是这样的. express升到4.0+之后 移除了connect中间件 很多网上的教程是基于express 4-的 4之后这样用吧.
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
收藏之~
根据你描述的错误信息 TypeError: Cannot read property 'Store' of undefined,问题在于你尝试从 connect 模块中读取 Store 属性,但 connect 变量未被正确定义。这通常是因为你可能没有正确地引入 Express 和 Connect 中间件库。
在较新的 Node.js 环境中,Express 已经内置了对 session 的支持,并且使用 express-session 来管理会话。如果你正在使用 connect-mongo 来存储 session 数据,你需要先安装 express-session 和 connect-mongo。
示例代码
首先,确保你已经安装了必要的依赖:
npm install express express-session connect-mongo
然后,在你的项目中配置 session 并使用 connect-mongo 存储 session 数据:
const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
const app = express();
// 连接 MongoDB
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection })
}));
app.get('/', (req, res) => {
req.session.views = (req.session.views || 0) + 1;
res.send(`You visited this page ${req.session.views} times`);
});
app.listen(3000, () => console.log('Server running on port 3000'));
解释
- express-session:这是用来处理 session 的中间件。
- connect-mongo:这是一个连接到 MongoDB 的 session 存储。
- MongoStore:这是
connect-mongo提供的一个类,用于存储 session 数据到 MongoDB。 - mongoose.connect():连接到 MongoDB 数据库。
- secret:用来加密 session 数据的安全密钥。
- store:将 session 存储到 MongoDB,这里我们使用了
MongoStore实例化对象。
确保在代码中正确引入了所有需要的模块,并且 connect 变量没有被误用。如果问题仍然存在,请检查是否有其他配置或环境变量的影响。

