使用connect redis来持久化express会话,而不需要redis服务器?

bweufnob  于 2021-06-10  发布在  Redis
关注(0)|答案(0)|浏览(361)

我最近了解到,当服务器重新启动时,我的express会话就结束了;我注意到,在开发过程中,每当我更改代码时,nodemon服务器就会重新启动,会话数据就会丢失。经过一些研究,我了解到使用像connectredis这样的外部会话存储是最好的,特别适合于生产。但是,在实现了我从文档中看到的内容并运行 npm run server 像往常一样,我犯了一个错误:

[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1129:14)

这意味着什么。经过进一步研究,我了解到这是因为redis没有运行/redis服务器没有运行,我遇到了如下解决方案:

sudo apt install redis-server

结果如下:

No Java runtime present, requesting install.

要得到一个jre和一个单独的redis服务器来在本地运行它似乎有点过分了。另外,所有这些将如何在生产环境中扩展。
也许我不知道我在说什么(后脚本:我是一个noob,最近才意识到这对我的应用程序很重要),因此我会依赖社区来解释。
目前,我已经决定使用connectmongo,但我真的希望redis这个东西能够工作,因为它似乎是最受欢迎的,而且可能是更好的整体选择。
所以,这是我的代码(它的一部分,最重要的部分):

const redis = require('redis');
const Redis = require('ioredis');
const connectRedis = require('connect-redis');
const connectMongo = require('connect-mongo');
const { REDIS_OPTIONS, SESSION_OPTIONS } = require('./config')

const app = express();

app.use(cors({
  origin: CLIENT_ORIGIN
}));

app.use(express.json());
app.use(cookieParser());

app.use( bodyParser.urlencoded({extended: true}));

require('./config/passport')(passport);

const db = process.env.MONGODB_URI_PROD;

mongoose
.connect(db, {
  useNewUrlParser: true,
  useFindAndModify: false,
  useUnifiedTopology: true
})
.then(() => {
    console.log("Connected to MongoDB...");
})
.catch(err => {
    console.log(err);
});

 const RedisStore = connectRedis(session);
//const MongoStore = connectMongo(session);

 const redisClient = new Redis(REDIS_OPTIONS);
// const redisClient2 = redis.createClient(REDIS_OPTIONS);

// Express session
app.use(
    session({
      ...SESSION_OPTIONS,
      //store: new MongoStore({ mongooseConnection: mongoose.connection })
      store: new RedisStore({ client: redisClient })
    })
);

app.use(passport.initialize());
app.use(passport.session());

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题