Ich habe zwei nodejs Server (Web-Server, Socket-Server), die von socket.io miteinander verbunden sind. Auf Web-Service verwende ich express.js und pass.js als Authentifizierungs-Middleware.Warum connect-mongo erstellt neue Sitzung für jede Anfrage?
Das ist meine Web-Server-Konfiguration:
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'));
});
Wenn ich connect-Mongo verwenden, es erstellt eine neue Sitzung für jede http-Anfrage.
Dieses Element schafft mit Login Anfrage:
{
"_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")
}
Und dieses Element erzeugt jedes Mal, wenn ich F5 drücken, oder Sockel nehmen.
{
"_id" : "JhypbYFtj1CGOK/ylMhG8+Yk",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
"expires" : new Date("21.3.2013 19:03:38")
}
Wenn Web-Server-Socket-Verbindung nimmt, connect-Mongo schafft neue Sitzung. Es gibt ungefähr 50 neue Dokumente pro Minute.
Was könnte der Grund sein?
UPDATE
Im Falle der Seite zu aktualisieren, half Spitze app.use(express.favicon())
hinzuzufügen.
Mit Sockets Frage ist immer noch aktuell.
Mein Socket-Server-Code
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");
Und auf Web-Server:
app.get('/cpu-details', function (req, res) { });
Awesome! Wenn ich 'express.favicon()' benutzte, war alles gut, wenn ich F5 drücke. Aber als ich meinen socket.io-Server gestartet habe, erstellt connect-mongo weiterhin neue Dokumente. Ich habe einen Code meines Socket-Servers hinzugefügt. – msmirnov
Stellen Sie sicher, dass Sie alle Routen oder Middleware, die nicht mit dem Pass und/oder den Sitzungen Middleware * vor * diese Middlewares behandelt werden sollten. Nur neugierig, aber gibt es einen Grund, dass Sie einen separaten socket.io Server verwenden? Sie können socket.io und Express zusammen in einer Server-App mischen. – robertklep
Ich habe falsch gesagt. Я haben zwei nodejs Server, und die Verbindung zwischen ihnen wird von socket.io hergestellt. – msmirnov