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

ES6环境下集成connect-redis与express-session报错求助

解决connect-redis与express-session集成时的TypeError问题

问题场景

在ES6项目中集成connect-redis与express-session,代码实现如下:

import session from 'express-session';
import connectRedis from 'connect-redis';
import { createClient } from 'redis';

const app = express();

async function startServer() {
    const redisURL = 'redis://localhost:6379';
    const redisClient = createClient();
    const RedisStore = connectRedis(session);
    await redisClient.connect({ url: redisURL });
    const store = new RedisStore({ redisClient });

    app.use(session({
        store: store ,
        secret: process.env.SESSION_SECRET,
        resave: false,
        saveUninitialized: false,    
        cookie: { 
            httpOnly: true, 
            path: '/', 
            sameSite: 'strict',
            expires: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000) 
        }
    }));
}

报错信息

D:\AI Projects\Hplayer - Copy\server\server.js:33
RedisStore = (0, _connectRedis["default"])(_expressSession["default"]);
^
TypeError: Class constructor RedisStore cannot be invoked without 'new'

解决方案

该错误源于connect-redis v7+版本的API变更,旧版本通过connectRedis(session)生成Store类的方式已被废弃,需调整为以下写法:

import session from 'express-session';
// 直接导入RedisStore类
import { RedisStore } from 'connect-redis';
import { createClient } from 'redis';

const app = express();

async function startServer() {
    const redisURL = 'redis://localhost:6379';
    // 初始化redisClient时直接传入URL参数
    const redisClient = createClient({ url: redisURL });
    await redisClient.connect();

    app.use(session({
        // 实例化RedisStore时,参数键名改为client
        store: new RedisStore({ client: redisClient }),
        secret: process.env.SESSION_SECRET,
        resave: false,
        saveUninitialized: false,    
        cookie: { 
            httpOnly: true, 
            path: '/', 
            sameSite: 'strict',
            expires: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000) 
        }
    }));
}

关键修改点

  • 直接从connect-redis导入RedisStore类,无需再通过connectRedis(session)生成
  • 实例化RedisStore时,配置参数的键名从redisClient改为client
  • 创建redis客户端时,直接将URL传入createClient,无需在connect方法中重复传入

内容的提问来源于stack exchange,提问作者Hetnon Freitas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:31:13