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

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错误。

修正步骤

  1. 修改connect-redis的导入方式
    将原来的:

    const redis = require('connect-redis');
    

    改为:

    const { RedisStore } = require('connect-redis');
    
  2. 移除无效的函数调用
    删除const RedisStore = redis(session);这一行,直接在session中间件配置里实例化RedisStore。

  3. 完整配置示例
    修正后的完整代码如下:

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:09:54