RedisStore创建报错:需使用new关键字,按教程配置仍无法解决
解决RedisStore初始化的TypeError问题
你的问题出在新版本的redis和connect-redis库API已变更,BenAwad的教程用的是旧版本写法,和你现在安装的新版本不兼容。
问题根源
redisv4+ 改变了客户端创建方式,redis.createClient()现在需要显式配置(如连接URL),且必须手动调用.connect()建立连接connect-redisv7+ 不再需要传入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
相关产品推荐
相关产品推荐

