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

如何在NestJS中使用Redis作为Express Session的存储并解决配置报错

问题原因

你使用的是v7及以上版本的connect-redis,该版本重构了API,不再提供默认导出的工厂函数,也不需要手动传入session对象进行初始化,因此原有写法会触发default is not a function的报错。

Redis方案修复步骤

  1. 调整connect-redis的导入逻辑,删除原来的工厂函数调用代码:
// 原来的写法直接删除
// import connectRedis from 'connect-redis';
// const RedisStore = connectRedis(session);

// 替换为新的导入写法
import { RedisStore } from 'connect-redis';
import session from 'express-session'; // 确认已正确导入express-session
import { redis } from './redis';
  1. 原有session配置无需额外修改,直接使用new RedisStore({ client: redis })即可:
app.use(
  session({
    store: new RedisStore({ client: redis }),
    cookie: {
      maxAge: 60000 * 60 * 24,
    },
    secret: 'mysecret',
    saveUninitialized: false,
    resave: false,
  }),
);

不需要额外配置NestJS Redis微服务,上述配置即可直接将Redis作为session存储使用。

Mongoose替代方案

如果不想使用Redis,可以使用connect-mongo实现基于MongoDB的session存储,适配你现有的Mongoose连接:

  1. 安装依赖:npm install connect-mongo
  2. 调整session配置:
import MongoStore from 'connect-mongo';
import mongoose from 'mongoose';

app.use(
  session({
    store: MongoStore.create({
      mongooseConnection: mongoose.connection, // 复用现有Mongoose连接
      ttl: 24 * 60 * 60 // session过期时间,和cookie的maxAge对应
    }),
    cookie: {
      maxAge: 60000 * 60 * 24,
    },
    secret: 'mysecret',
    saveUninitialized: false,
    resave: false,
  }),
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:27:04