Connect-redis搭配express-session配置失败:报错The client is closed
问题核心原因
你安装的是redis@4.x及以上版本的Node Redis客户端,该版本做了破坏性API变更,和旧版v3不兼容:
- v3版本调用
createClient后会自动与Redis服务建立连接,v4版本必须手动调用connect方法才能完成连接 - v4版本的连接配置参数结构发生变化,
host、port参数需要放到socket字段下才会生效
你当前的代码既没有手动触发连接,配置参数格式也不符合v4要求,所以Redis客户端一直处于关闭状态,当express-session尝试通过RedisStore读写会话数据时就会抛出The client is closed错误。
修复方案
二选一即可:
方案1:适配v4版本API(推荐)
修改Redis客户端初始化相关代码,补全连接逻辑和正确的配置:
const redisClient = redis.createClient({ // v4版本连接参数放到socket字段下 socket: { port: 6379, host: 'localhost', } }); // 监听Redis错误方便排查问题 redisClient.on('error', err => console.error('Redis连接错误: ', err)); // 手动触发连接,等待连接完成再初始化RedisStore await redisClient.connect();
方案2:降级到v3版本的Redis客户端
如果你不想修改现有代码,直接将redis版本回退到最后一个v3稳定版即可:
yarn add redis@3.1.2
额外检查项
请先确认你本地6379端口的Redis服务已经正常启动,排除服务未运行导致的连接失败问题。
内容的提问来源于stack exchange,提问作者Gleb Gaiduk
相关产品推荐
相关产品推荐

