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

RedisStore创建报错:需使用new关键字,按教程配置仍无法解决

解决RedisStore初始化的TypeError问题

你的问题出在新版本的redis和connect-redis库API已变更,BenAwad的教程用的是旧版本写法,和你现在安装的新版本不兼容。

问题根源

  • redis v4+ 改变了客户端创建方式,redis.createClient()现在需要显式配置(如连接URL),且必须手动调用.connect()建立连接
  • connect-redis v7+ 不再需要传入express-session作为参数,导入方式也直接是RedisStore类

修正步骤

1. 统一依赖安装命令(不要混用npm和yarn)

删除现有依赖后重新安装(选一种包管理器即可):

# 用yarn的话
yarn remove redis connect-redis express-session
yarn add redis connect-redis express-session
yarn add -D @types/redis @types/connect-redis @types/express-session

2. 修改代码适配新版本API

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

// 创建Redis客户端并连接
const redisClient = createClient({
  // 若你的Redis有密码或自定义端口,在这里配置,默认本地是redis://localhost:6379
  url: 'redis://localhost:6379'
});

// 处理Redis连接错误
redisClient.on('error', (err) => console.log('Redis Client Error', err));
// 手动建立连接
await redisClient.connect();

app.use(
  session({
    name: "qid",
    store: new RedisStore({ 
      client: redisClient,
      // 可选:添加其他RedisStore配置,如前缀
      prefix: 'myapp:'
    }),
    // 必须补充session的必填配置
    secret: 'your-secret-key-here',
    resave: false,
    saveUninitialized: false,
    cookie: {
      secure: process.env.NODE_ENV === 'production', // 生产环境需HTTPS
      maxAge: 1000 * 60 * 60 * 24 * 7 // 7天有效期
    }
  })
);

关键变化说明

  • 直接从connect-redis导入RedisStore类,无需再用connectRedis(session)包装
  • redis.createClient需要传入配置对象,且必须调用await redisClient.connect()完成连接
  • session配置必须包含secret等必填项,否则会触发额外报错

额外检查

  • 确保本地Redis服务器正在运行(用redis-cli ping测试,返回PONG即为正常)
  • 如果Redis有密码或非默认端口,在createClient的配置里添加对应参数(如password: 'your-redis-password'、port: 6380)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:12:42