通过Express和MongoDB使用会话,为什么我只能连接一次路由,除非我更改会话机密



Express.js中有一个应用程序正在5000端口上运行。我已经做了一段时间了,一切都很好。不过,最近出现了一些问题,可能与升级到山狮有关。我不确定。

为了简化应用程序,我现在只设置了一个GET路由示例:

  app.get('/', function(req, res){
    console.log('made it here');
    res.end('Hey there');
  });

出于某种原因,当我尝试通过网络浏览器(chrome、safari)连接时,它不会连接不止一次。但是,如果我通过远程登录直接连接到端口并发出GET/,我会得到我期望的响应(因为我认为没有会话在运行)。

此外,如果我更改了会话机密,我可以通过浏览器一次/一次连接到它,那么随后的刷新永远不会到达该路由(该路由从未记录200),直到我再次更改机密。

以下是我如何设置会话:

app.use(express.cookieParser());
var mongoCon = require('connect-mongodb');
var session = express.session({
  store: new mongoCon({
      db: mongoose.connection.db
    , maxAge: 300000
  }), secret: 'donut' 
});
app.use(session);

编辑:如果我在会话存储中使用MemoryStore而不是Mongo,它会很好地工作。

同样,这已经好几个星期了。我最近更新到了Mountain Lion。我也重新安装了npms,但验证了我运行的连接mongodb、mongose、express等版本与以前相同。我有同样的代码库在Ubuntu盒子上运行,看起来很好。所以也许这是Mac的问题。

我意识到这是一个没有太多细节的疯狂问题,但我在这里有点不知所措。有什么想法吗?

我发现它与我使用的Mongoose版本有关。我在Mac上使用了mongoose的最新版本(3.0.2),在Ubuntu上使用了2.7.2。我猜mongoose.connection.db对象中的某些内容已经更改。我一有机会就会核实。

我以为我已经试过了,但我一定在某个时候混淆了版本。

希望Mongoose团队的某个人(也许是aheckmann)能看到这一点,并告诉我这是我可以在我的端上解决的问题,还是连接mongodb等的问题。

最新更新