Node.js 为什么connect mongo会为每个请求创建新会话?

Node.js 为什么connect mongo会为每个请求创建新会话?,node.js,mongodb,authentication,express,passport.js,Node.js,Mongodb,Authentication,Express,Passport.js,我有两个nodejs服务器(web服务器、socket服务器),它们通过socket.io相互连接。在web服务上,我使用express.js和passport.js作为身份验证中间件 这是我的web服务器配置: var express = require('express'), mongo = require('mongodb'), io = require('socket.io'), passport = require('passport'), LocalS

我有两个nodejs服务器(web服务器、socket服务器),它们通过socket.io相互连接。在web服务上,我使用express.js和passport.js作为身份验证中间件

这是我的web服务器配置:

var express = require('express'),
    mongo = require('mongodb'),
    io = require('socket.io'),
    passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy,
    MongoStore = require('connect-mongo')(express);

app.configure(function () {
    app.use(express.cookieParser());
    app.use(express.methodOverride());
    app.use(express.bodyParser());
    app.use(express.session({
        secret: 'keyboard cat',
        store: new MongoStore({
          db: 'MyDatabase'
        })
    }));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(app.router);
    app.use(express.static(__dirname + '/htdocs'));
});
当我使用connect mongo时,它会为每个http请求创建一个新会话。

此元素通过登录请求创建:

{
  "_id" : "UCnXade6Bk6ofOZ+jiEgzyH8",
  "session" : "{\"cookie\":{\"originalMaxAge\":31536000000,\"expires\":\"2014-03-07T13:07:45.703Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"50cae08806e31ea2e5634e3f\"}}",
  "expires" : new Date("7.3.2014 19:07:45")
}
每次我按F5键,或者取套接字时,这个元素都会创建

{
  "_id" : "JhypbYFtj1CGOK/ylMhG8+Yk",
  "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
  "expires" : new Date("21.3.2013 19:03:38")
}
当web服务器采用套接字连接时,connect mongo将创建新会话。每分钟大约有50个新文档

原因可能是什么

更新

在更新页面时,帮助提示添加
app.use(express.favicon())

这个问题仍然是实际的

我的套接字服务器代码

function sendPortalJSON (portal_id, data, _event) {
    https.get({
        host : ....,
        port : ....,
        path : "/" + _event + "?data=" + encodeURIComponent( JSON.stringify (data))
    }).on('error', function (err) {

    });
}
...
sendPortalJSON(1, agent_data[i].d, "cpu-details");
和在web服务器上:

app.get('/cpu-details', function (req, res) { });

首先,尝试将静态中间件移动到会话中间件之前。另外,一些浏览器处理
/favicon.ico
的请求有点古怪,所以尝试使用
express.favicon()
看看它是否解决了您的问题

比如说:


令人惊叹的!当我使用
express.favicon()
时,当我按F5时一切都很好。但是,当我启动socket.io服务器时,connect mongo仍在继续创建新文档。我为socket-server添加了一些代码。请确保将任何不应由passport和/或会话中间件处理的路由或中间件放在这些中间件之前。只是好奇,但是您使用单独的socket.io服务器有什么原因吗?你可以在一个服务器应用程序中混合使用socket.io和Express。我说的不对。Я有两个nodejs服务器,它们之间通过socket.io进行连接。
...
app.use(express.favicon());
app.use(express.static(__dirname + '/htdocs'));
app.use(express.session({...});
...