我最近了解到,当服务器重新启动时,我的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());
暂无答案!
目前还没有任何答案,快来回答吧!