Использовать connect-redis для сохранения сеанса express без необходимости в сервере redis? - PullRequest
0 голосов
/ 06 августа 2020

Недавно я узнал, что мои 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...