macos - 通过 Express 和 MongoDB 使用 session ,为什么我只能连接一次路由,除非我更改 session key ?

标签 macos session mongodb express mongoose

我在 Express.js 中有一个应用程序,正在端口 5000 上运行。我已经研究它一段时间了,一切都很好。最近出了点问题,可能与升级到 Mountain Lion 有关。我不知道。

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

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

出于某种原因,当我尝试通过网络浏览器(chrome、safari)连接时,它不会连接多次。但是,如果我直接通过 telnetting 到端口并发出 GET/进行连接,我会得到我期望的响应(因为我假设没有 session 在运行)。

此外,如果我更改 session key ,我可以通过浏览器一次/再次连接到它,然后后续刷新永远不会命中该路由(该路由永远不会记录 200),直到我再次更改 key 。

以下是我设置 session 的方式:

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 作为 session 存储,它可以正常工作。

同样,这几周以来一直运行良好。我最近更新到了 Mountain Lion。我还重新安装了 npms,但确认我正在运行与以前相同版本的 connect-mongodb、mongoose、express 等。我在 Ubuntu 机器上运行了相同的代码库,看起来不错。所以可能是 Mac 的问题。

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

最佳答案

我发现这和我使用的Mongoose版本有关。我在 Mac 上使用最新版本的 mongoose (3.0.2),在 Ubuntu 上使用 2.7.2。我猜测 mongoose.connection.db 对象中的某些内容已更改。当我有机会时我会验证。

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

希望来自 Mongoose 团队的人(也许是 ahemeckmann)会看到这个,并让我知道我是否可以解决这个问题,或者是否是 connect-mongodb 的问题等。

关于macos - 通过 Express 和 MongoDB 使用 session ,为什么我只能连接一次路由,除非我更改 session key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096068/

相关文章:

macos - Mac 终端中的 mkdir/cp 给出 "Permission denied"错误

jquery - 使用 jQuery 控制用户操作

vb.net - 跨选项卡和窗口的 IE8 session 共享

javascript - 在我的 html 中使用 Node 函数

mongodb - 使用 GridFS 和 Meteor 在 Mongodb 中存储图像

ios - 苹果的证书是什么?

macos - 有关于自定义 NSComboBox 的示例吗?

macos - 如何 #!工作以及如何使其适用于 CoffeeScript?

java - 使来自 EL 的 session 无效

javascript - Mongoose 填充值并修改对象