Redis存储初始化失败:TypeError: redis is not a function问题求助
TypeError: redis is not a function 解决(Redis Session认证)
问题原因
你安装的是connect-redis@7.1.0,这个版本开始导出结构发生了变化——不再默认导出一个可直接调用的函数,而是导出包含RedisStore类的对象。教程里的写法是针对旧版本(v6及以下)的,所以会触发TypeError: redis is not a function错误。
修正步骤
修改connect-redis的导入方式
将原来的:const redis = require('connect-redis');改为:
const { RedisStore } = require('connect-redis');移除无效的函数调用
删除const RedisStore = redis(session);这一行,直接在session中间件配置里实例化RedisStore。完整配置示例
修正后的完整代码如下:const session = require("express-session"); const { RedisStore } = require('connect-redis'); const express = require('express'); const app = express(); app.use(express.json()); app.use(express.urlencoded({ extended: true })); const redisClient = require('redis').createClient({ legacyMode: true }); redisClient.connect().catch(console.log); // 配置express-session使用Redis存储 app.use(session({ store: new RedisStore({ client: redisClient }), secret: 'your-custom-secret-key', // 替换为你的密钥 resave: false, saveUninitialized: false, cookie: { httpOnly: true, maxAge: 24 * 60 * 60 * 1000 // 会话有效期1天 } }));
关于代码高亮差异的说明
教程里的代码高亮显示redis是函数,是因为教程使用的是connect-redis旧版本(v6及以下),旧版本默认导出函数,编辑器能识别为可调用类型;而你安装的v7+版本导出的是对象,编辑器识别为普通对象,所以高亮显示不同,这也侧面印证了版本差异是问题根源。
内容的提问来源于stack exchange,提问作者xMorlor
相关产品推荐
相关产品推荐

