已用new实例化RedisStore仍报错:Class constructor无法被调用
解决「Class constructor RedisStore cannot be invoked without 'new'」错误
这个错误大概率是connect-redis、redis和express-session的版本不兼容或者客户端初始化方式错误导致的,即使你已经用了new关键字,下面是具体的修复方案:
方案1:适配最新版依赖(推荐)
如果你的项目用的是redis@4.x和connect-redis@7.x+,旧的connectRedis(session)调用方式已经失效,需要调整代码:
- 确保安装最新版依赖:
npm install connect-redis redis express-session
- 修改代码为正确的用法:
const { createClient } = require('redis'); const session = require('express-session'); const RedisStore = require('connect-redis').default; // 创建Redis客户端并手动连接(redis@4+必须调用connect) const client = createClient(/* 可添加Redis配置,比如url: 'redis://localhost:6379' */); client.connect().catch(console.error); app.use( session({ name: "kid", store: new RedisStore({ client: client, disableTouch: true }), // 必须添加的session基础配置 secret: 'your-custom-secret-key', resave: false, saveUninitialized: false }) );
方案2:兼容旧版依赖
如果要继续使用connect-redis@6.x及以下版本,需要搭配redis@3.x,并保持原有调用方式,同时确保客户端初始化正确:
- 安装指定版本依赖:
npm install connect-redis@6 redis@3 express-session
- 调整客户端初始化代码:
const redis = require('redis'); const session = require('express-session'); const connectRedis = require('connect-redis'); const RedisStore = connectRedis(session); // redis@3的客户端创建方式 const client = redis.createClient({ host: 'localhost', port: 6379 }); // 监听Redis错误 client.on('error', (err) => console.log('Redis连接错误:', err)); app.use( session({ name: "kid", store: new RedisStore({ client: client, disableTouch: true }), secret: 'your-custom-secret-key', resave: false, saveUninitialized: false }) );
额外检查项
- 确认本地Redis服务正在运行,端口、地址与代码配置一致
- 确保
express-session的基础配置(secret等)完整,缺失可能引发关联错误
内容的提问来源于stack exchange,提问作者courtelo
相关产品推荐
相关产品推荐

