7
我有兩個nodejs服務器(網絡服務器,套接字服務器),它們通過socket.io互相連接。在web服務上,我使用express.js和passport.js作爲身份驗證中間件。爲什麼connect-mongo爲每個請求創建新會話?
這是我的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'));
});
當我使用連接蒙戈,它會爲每個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個新文件。
可能是什麼原因?
UPDATE
在更新頁面的情況下,起到了推波助瀾的補充。
套接字問題仍然是實際的。
我的套接字服務器代碼
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) { });
真棒!當我使用'express.favicon()'時,當我按F5時一切正常。但是,當我啓動socket.io服務器時,connect-mongo仍然繼續創建新文檔。 我添加了一些我的套接字服務器的代碼。 – msmirnov 2013-03-08 09:36:52
確保在這些中間件之前放置任何不應由護照和/或會話中間件*處理的路由或中間件*。只是好奇,但有一個原因,你使用一個單獨的socket.io服務器?您可以在一個服務器應用程序中將socket.io和Express混合在一起。 – robertklep 2013-03-08 09:49:59
我錯誤地說。 Я有兩個nodejs服務器,並通過socket.io在它們之間建立連接。 – msmirnov 2013-03-08 09:57:54