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

开发实时聊天应用时,connect-redis出现require(...) is not a function错误

解决express-session搭配connect-redis时的require(...) is not a function错误

问题原因

你遇到的require(...) is not a function错误,核心原因是connect-redis版本迭代后导出方式发生了变化。v6及以上版本不再默认导出可直接调用的函数,而是需要通过解构或.default属性获取RedisStore构造函数。

解决方案

1. 调整connect-redis的导入语句

根据你使用的Redis客户端(ioredis或官方redis包),修改导入代码:

如果你用ioredis:

const session = require("express-session");
const Redis = require("ioredis");
// 从connect-redis的default导出中获取RedisStore
const RedisStore = require("connect-redis").default;

如果你用官方redis包:

const session = require("express-session");
const { createClient } = require("redis");
const RedisStore = require("connect-redis").default;

2. 修正Redis客户端初始化(针对官方redis包)

官方redis包v4+需要显式调用connect()建立连接:

const redisClient = createClient({
  // 可选:添加Redis连接配置,如url、密码等
  // url: "redis://localhost:6379"
});
// 处理连接错误
redisClient.connect().catch(console.error);

3. 优化express-session配置细节

注意几个容易踩坑的配置项:

  • cookie.secure应该是布尔值,而非字符串,避免解析异常
  • 推荐用maxAge替代expires,更直观控制会话有效期
app.use(session({
    secret: process.env.COOKIE_SECRET,
    credentials: true,
    name: "$id",
    store: new RedisStore({ client: redisClient }),
    resave: false,
    saveUninitialized: false,
    cookie: {
        secure: process.env.ENVIRONMENT === "production", // 生产环境设为true,开发环境默认false
        httpOnly: true,
        maxAge: 1000 * 60 * 60 * 24 * 7, // 7天有效期
        sameSite: process.env.ENVIRONMENT === "production" ? "none" : "lax",
    }
}));

验证步骤

  1. 运行npm list connect-redis确认版本是否为v6+
  2. 重启服务后测试登录态是否能在页面刷新后保持
  3. 检查Redis客户端是否正常连接(可通过Redis CLI执行KEYS *查看会话键值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:20:03