《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,也许会有意想不到的收获。
问题描述
在使用 connect-mongo
插件来配置 session 时,遇到了一个错误:
TypeError: Cannot read property 'Store' of undefined
解决方案
该错误通常是因为 connect-mongo
的版本与示例代码中的版本不匹配导致的。在较新的版本中,connect-mongo
需要传递一个参数(通常是 express
实例)来初始化。
以下是具体的解决步骤:
-
检查
connect-mongo
版本:确保你安装的connect-mongo
版本是最新的或者与教程中一致。npm install connect-mongo[@latest](/user/latest)
-
修改代码:根据
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'
})
}));
// 其他中间件和路由配置
解释
- 导入模块:确保正确导入了所需的模块。
- 创建 MongoDB 存储实例:使用
new MongoStore
创建一个新的存储实例,并传入数据库连接 URL。 - 配置会话:在
express-session
的配置选项中,设置store
为上述创建的MongoStore
实例。
通过这种方式,可以避免 TypeError: Cannot read property 'Store' of undefined
错误,确保 connect-mongo
能够正确初始化并保存会话数据到 MongoDB 中。
希望这能帮助你解决问题!如果还有其他疑问,请继续讨论。