节点中的永久会话存储

时间:2014-04-04 18:57:16

标签: javascript mysql node.js angularjs express

我现在有一个节点服务器正在运行,我使用npm forever来保持它在我不开发时运行,我在编辑时使用npm nodemon(在编辑/上传时重新启动应用程序)。

我注意到每当我重新启动应用程序时,会话数据都会丢失,我的玩家必须重新登录他们的帐户。这不是一个huuuge交易,但我想知道是否有办法编辑我的server.js页面而不重新启动应用程序,并记录每个人?

(请注意,这仅适用于server.js或模块编辑。提供的.html.js页面不需要重新启动)

(第二个注释:我正在使用mysql,nodejs,angularjs,express.io这一切,以防万一有人问)

1 个答案:

答案 0 :(得分:7)

无法重新启动服务器并重新加载文件,无法编辑文件(并加载更改)。相反,将会话数据存储在内存以外的其他位置。我知道你正在使用MySQL,所以使用connect-mysql包(对于redis,MongoDB等,还有其他类似的包。)

就像将它放在app.js文件中一样简单:

var MySQLStore = require('connect-mysql')(express)
    ,  options = {
      config: {
        host : 'place.stuff',
        user: 'RUJordan',
        password: 'hunter2',
        database: 'SomeKittensIsGreat'
      }
  };

app.use(express.session({
    secret: 'UpvoteThisAnswer',
    store: new MySQLStore(options),
    cookie: { maxAge: 2592000000 } // 30 days
}));

这将在每个用户的计算机上放置一个仅限HTTP(即用户无法查看/使用它)cookie。即使在重新启动服务器之后,connect-mysql也能够通过此cookie将用户的会话数据与MySQL相提并论。