如何在NestJS中使用Redis作为Express Session的存储并解决配置报错
问题原因
你使用的是v7及以上版本的connect-redis,该版本重构了API,不再提供默认导出的工厂函数,也不需要手动传入session对象进行初始化,因此原有写法会触发default is not a function的报错。
Redis方案修复步骤
- 调整
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';
- 原有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连接:
- 安装依赖:
npm install connect-mongo - 调整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
相关产品推荐
相关产品推荐

