《Nodejs开发指南》示例代码调试问题之——TypeError: Cannot read property 'Store' of undefined

《Nodejs开发指南》示例代码调试问题之——TypeError: Cannot read property ‘Store’ of undefined

这个问题是在配置session是出现的。

这个问题跟express版本没关系,主要是你用的connect-mongo的版本也许跟书里教程用的不是同一版本。看看connect-mongo的readme。 你修改如下试试: 将 var mongoStore = require(“connect-mongo”); 改为var mongoStore = require(“connect-mongo”)(express);

经过解决这个问题的过程体会到,虽然很多东西是新接触,但是不要觉得多神秘,是有规律所寻的。 由于各个插件的更新比较快,所以会有些向下兼容问题,多看看插件的readme,也许会有意想不到的收获。


8 回复

问题描述

在使用 connect-mongo 插件来配置 session 时,遇到了一个错误:

TypeError: Cannot read property 'Store' of undefined

解决方案

该错误通常是因为 connect-mongo 的版本与示例代码中的版本不匹配导致的。在较新的版本中,connect-mongo 需要传递一个参数(通常是 express 实例)来初始化。

以下是具体的解决步骤:

  1. 检查 connect-mongo 版本:确保你安装的 connect-mongo 版本是最新的或者与教程中一致。

    npm install connect-mongo[@latest](/user/latest)
    
  2. 修改代码:根据 connect-mongo 的最新文档,你需要传递 express 实例给 require("connect-mongo")

以下是具体的修改代码示例:

修改前的代码

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

const app = express();

app.use(session({
  secret: 'your-secret-key',
  store: new MongoStore(),
  resave: false,
  saveUninitialized: false
}));

修改后的代码

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',
  store: new MongoStore(),
  resave: false,
  saveUninitialized: false
}));

解释

  • 在较新的版本中,connect-mongo 需要接收 express-session 的实例作为参数,以便正确地创建存储实例。
  • 修改后的代码通过 require('connect-mongo')(session) 来初始化 MongoStore,这样可以确保它能够正确地处理 session 存储。

通过上述修改,你应该能够解决 TypeError: Cannot read property 'Store' of undefined 这个错误。如果仍然遇到问题,请查阅 connect-mongo 的官方文档以获取更多帮助。


刚刚查看了下mongo数据库,果然多了个sessions的collection, 换了几个浏览器访问下,多了条记录。 有个问题: 没找到配置session的超时时间。不晓得mongo库里的sessions集合什么时候清理垃圾session?

session应该是由express来配置的

这些问题我也都遇到了,总算是解决了,但是现在我又遇到了新的问题,我按照书上写的,在注册或登录是,返回403 Error: Forbidden,是node没有数据库的写入权限吗,该怎么解决,谢谢

我碰到了,是不是加了csrf.中间件。

也遇到了类似的问题,这些问题不止一个啊。

nodejs中文开发文档,没人维护啊!老碰壁(初学者)!

根据你提供的背景信息和描述的问题,这个问题通常出现在使用 connect-mongo 来配置 session 的时候。错误提示 TypeError: Cannot read property 'Store' of undefined 表明在尝试读取 Store 属性时,它还没有被定义。

以下是一个可能的解决方案,包括示例代码和解释:

示例代码

首先,确保你的 connect-mongo 版本是最新的,并且与你的 express 版本兼容。你可以通过 NPM 安装或更新 connect-mongo

npm install connect-mongo@latest --save

接下来,在你的 Express 应用中正确配置 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/sessionDB'
    })
}));

// 其他中间件和路由配置

解释

  1. 导入模块:确保正确导入了所需的模块。
  2. 创建 MongoDB 存储实例:使用 new MongoStore 创建一个新的存储实例,并传入数据库连接 URL。
  3. 配置会话:在 express-session 的配置选项中,设置 store 为上述创建的 MongoStore 实例。

通过这种方式,可以避免 TypeError: Cannot read property 'Store' of undefined 错误,确保 connect-mongo 能够正确初始化并保存会话数据到 MongoDB 中。

希望这能帮助你解决问题!如果还有其他疑问,请继续讨论。

回到顶部