Heroku connect.sessions()内存泄漏,没有缩放

时间:2017-05-05 16:06:36

标签: node.js heroku cookies express-session

尝试使用具有API调用的heroku部署应用程序并连接到数据库...

错误日志:" 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数据库。

1 个答案:

答案 0 :(得分:1)

如果您没有明确配置会话商店connect.session()(您可能应该用express-session替换,因为后者仍在维护,而前者最后一次更新4年前)使用内存中对象来存储会话。

这不仅会逐渐增加应用程序的内存使用量(这就是警告的内容),而且还意味着如果您的服务器必须重新启动,您的所有部分都将消失。

要解决此问题,您应该配置持久会话存储,其中会话数据将以更持久的方式存储,通常在数据库中。会话商店列表can be found here

由于您已经在使用PostgreSQL,connect-pg-simple似乎是合乎逻辑的候选者。