Mam dwa serwery nodejs (serwer sieciowy, serwer gniazd), które są połączone ze sobą przez socket.io. W serwisie internetowym korzystam z plików express.js i passport.js jako oprogramowania pośredniczącego do uwierzytelniania.Dlaczego connect-mongo tworzy nową sesję dla każdego żądania?
To mój web-server config:
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'));
});
Kiedy używać connect-Mongo, tworzy nową sesję dla każdego żądania HTTP.
Ten element tworzy z dziennika na żądanie:
{
"_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")
}
I ten element tworzy za każdym razem, gdy naciśnięty klawisz F5 lub wybrać gniazdo.
{
"_id" : "JhypbYFtj1CGOK/ylMhG8+Yk",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
"expires" : new Date("21.3.2013 19:03:38")
}
Gdy serwer internetowy przyjmuje połączenie przez gniazdo, connect-mongo tworzy nową sesję. Istnieje około 50 nowych dokumentów na minutę.
Jaki może być tego powód?
UPDATE
W przypadku aktualizowania strony, pomógł końcówkę dodać app.use(express.favicon())
.
Z pytaniem o gniazda jest nadal aktualne.
Mój kod gniazdo-server
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");
I na web-serwera:
app.get('/cpu-details', function (req, res) { });
Awesome! Kiedy użyłem 'express.favicon()', wszystko było dobrze, kiedy naciskam F5. Ale kiedy uruchomiłem serwer socket.io, connect-mongo wciąż kontynuuje tworzenie nowych dokumentów. Dodałem kod mojego serwera-gniazda. – msmirnov
Upewnij się, że umieściłeś wszystkie trasy lub oprogramowanie pośrednie, które nie powinny być obsługiwane przez paszport i/lub sesje middleware * przed * tymi middleware. Po prostu ciekawy, ale czy istnieje powód, że używasz osobnego serwera socket.io? Możesz połączyć pliki socket.io i Express w jednej aplikacji serwerowej. – robertklep
Niepoprawnie powiedziałem. Я mają dwa serwery nodejs i połączenie między nimi odbywa się przez socket.io. – msmirnov