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

Express中connectRedis不是函数报错,已降级v6解决求问错误原因

运行环境
Ubuntu Mate 22.04.2 lts
Node 18.16.0
Redis 7.0.11 - 无密码(无需认证),ping-pong测试通过
"body-parser": "^1.20.2"
"connect-redis": "^7.1.0"
"cors": "^2.8.5"
"dotenv": "^16.3.1"
"express": "^4.18.2"
"express-session": "^1.17.3"
"redis": "^4.6.7"
问题情况

我尝试运行两个Node.js Redis会话存储示例,均出现错误:

  • 第一个示例运行后报错:
const redisStore = require('connect-redis')(session);
                                           ^
TypeError: require(...) is not a function
at Object.<anonymous> (/home/dol/MyPrograms/redis03/index.js:19:44)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
  • 第二个示例运行后报错:
const RedisStore = connectRedis(session)
                   ^
TypeError: connectRedis is not a function
at Object.<anonymous> (/home/dol/MyPrograms/redis01/index.js:11:20)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47

我已经通过安装connect-redis 6版本替代7版本解决了问题,但不清楚v7版本出错的原因,特此求助:到底是哪里操作错了?

问题原因与解决方法

connect-redis从v7版本开始,导出方式发生了根本性变化:

  • v6及更早版本:包直接导出一个可调用的工厂函数,所以可以用const redisStore = require('connect-redis')(session)这类写法直接生成存储实例
  • v7版本:改用ES模块风格导出,默认导出的是RedisStore类。在CommonJS环境(使用require)下,需要通过.default属性获取这个类,正确写法如下:
const RedisStore = require('connect-redis').default;
// 假设你已经创建了Redis客户端实例redisClient
const store = new RedisStore({ client: redisClient, session: session });

如果你的项目支持ES模块(将文件后缀改为.mjs,或者在package.json中设置"type": "module"),也可以用import语法:

import RedisStore from 'connect-redis';
import session from 'express-session';

const store = new RedisStore({ client: redisClient, session: session });

你之前使用的示例都是基于connect-redis v6的旧写法,直接套用在v7上就会因为导出结构不匹配,导致require(...)不是函数的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:14:57