You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已用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)调用方式已经失效,需要调整代码:

  1. 确保安装最新版依赖:
npm install connect-redis redis express-session
  1. 修改代码为正确的用法:
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,并保持原有调用方式,同时确保客户端初始化正确:

  1. 安装指定版本依赖:
npm install connect-redis@6 redis@3 express-session
  1. 调整客户端初始化代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:57:31