Утечка памяти Heroku connect.sessions(), не масштабируется

при попытке развернуть приложение с помощью heroku, которое имеет вызовы API и подключается к базе данных...

журнал ошибок: «connect.session() MemoryStore не предназначен для производственной среды, так как будет происходить утечка памяти и не будет масштабироваться дальше одного процесса».

Я использую такие сеансы...

app.use(session({
    secret: "I am nerdier than most",
    saveUninitialized: true,
    resave: true,
    cookie: { maxAge: 60000 }
}));

`/// using session as global validation //
app.use(function(req, res, next) {
  if (req.session && req.session.user) {
    db.users.findOne({ email: req.session.user.email }, function(err, 
    user) {
      if (user) {
        req.user = user;
        delete req.user.password; // delete the password from the 
        session
        req.session.user = user;  //refresh the session value
        res.locals.user = user;
      }
 // finishing processing the middleware and run the route
      next();
   });
  } else {
       next();
  }
})`

Как мне исправить ошибку?

Локально я могу нормально запустить приложение. Я подключаюсь к базе данных postgres через массив.


person theman0123    schedule 05.05.2017    source источник


Ответы (1)


Если вы явно не настраиваете хранилище сеансов, connect.session() (которое вам, вероятно, следует заменить на express-session, потому что последний все еще поддерживается, а первый последний раз обновлялся 4 года назад) использует объект в памяти для хранения сеансов.

Это не только постепенно увеличит использование памяти вашим приложением (о чем и говорится в предупреждении), но также означает, что все ваши сеансы исчезнут, если ваш сервер перезагрузится.

Чтобы исправить это, вы должны настроить постоянное хранилище сеансов, где данные сеанса будут храниться более постоянным образом, обычно в базе данных. Список хранилищ сеансов можно найти здесь.

Поскольку вы уже используете PostgreSQL, connect-pg-simple кажется логичным кандидатом.

person robertklep    schedule 05.05.2017
comment
чтобы повторить/уточнить: я должен использовать другую базу данных для хранения своих сеансов, что предотвращает потерю информации. экспресс-сессия все еще поддерживается. хорошим кандидатом является «pg». - person theman0123; 05.05.2017