Недавно я узнал, что мои express сеансы заканчиваются при перезапуске сервера; Я заметил, что во время разработки, когда я когда-либо менял код и, следовательно, перезагружал сервер nodemon, данные сеанса терялись. После некоторых исследований я узнал, что использование внешнего хранилища сеансов, такого как connect-redis, лучше всего и особенно хорошо подходит для производства. Однако после реализации того, что я видел из документации, и запуска 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, чтобы иметь возможность запускать это локально. Кроме того, как все это будет масштабироваться в производственной среде.
Возможно, IDK, о чем я говорю (постскриптум: я новичок, и только недавно понял, что это важно для моего приложения), поэтому я ' Я полагаюсь на сообщество для объяснения. предпочтительный и, вероятно, лучший вариант в целом.
Итак, вот мой код (его часть, самая важная часть):
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());