Nodejs require('connect-mongo'); 注册登录Session时报错

Nodejs require(‘connect-mongo’); 注册登录Session时报错

var Store = connect.Store || connect.session.Store; ^ TypeError: Cannot read property ‘Store’ of undefined

7 回复

好的,让我们来分析一下这个问题。根据你提供的错误信息,看起来你在使用 connect-mongo 模块时遇到了一个类型错误(TypeError),具体是因为无法读取未定义对象的 Store 属性。

原因分析

这个错误通常发生在以下几种情况之一:

  1. 未正确安装或导入依赖:确保你已经正确安装了 express-sessionconnect-mongo
  2. 版本兼容性问题:确保你使用的 express-sessionconnect-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');
});

详细说明

  1. 引入必要的模块

    • express:用于创建Web应用。
    • express-session:用于处理会话。
    • connect-mongo:用于将会话存储在MongoDB中。
  2. 配置会话中间件

    • secret:用于签名会话cookie的密钥。
    • resavesaveUninitialized:分别表示是否重新保存未修改的会话,以及是否保存尚未初始化的会话。
    • store:指定会话存储的方式,这里使用 MongoStore 将会话数据存储到MongoDB中。
  3. 路由处理

    • 在根路径 / 上增加一个简单的路由,用于展示访问次数。

通过以上步骤,你应该能够解决 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-sessionconnect-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 变量没有被误用。如果问题仍然存在,请检查是否有其他配置或环境变量的影响。

回到顶部