I've written the following test code illustrating my problem:
var express = require("express"),
MongoStore = require("connect-mongo")(express),
mongoose = require("mongoose"),
config = require(process.cwd() + "/src/config");
exports.run = function() {
console.info("running http server");
//create a new HTTP server
var server = express();
//sessions
server.use(express.cookieParser(config.sessions.secret));
server.use(express.session({
secret: config.sessions.secret,
key: config.sessions.key,
proxy: true,
cookie: {maxAge: config.sessions.maxAge, signed: true},
store: new MongoStore({
mongoose_connection: mongoose.connection
}, onStoreSetup)}));
//create a test ObjectID parameter
var testObjId = new mongoose.Types.ObjectId("522bb0205a259c636c000006");
server.get("/", function(req, res) {
if (req.session && req.session.testObjId) {
res.send("req.session.testObjId now has type " + typeof req.session.testObjId + " - WHY A STRING?");
}
else {
req.session.testObjId = testObjId;
req.session.save(function(err) {
if (err) throw err;
res.send("req.session.testObjId has type " + typeof req.session.testObjId + " - an Object, as expected - NOW REFRESH THIS PAGE");
});
}
});
//listen for incoming connections once session store is setup
function onStoreSetup() {
console.info("mongo session store connected");
server.listen(config.http.port);
console.info("http server listening on port %d", config.http.port);
}
};
First it writes a variable with type ObjectId (from MongoDB native) to the server side session store. When you then refresh the page, the session is used, and the type of the parameter has suddenly changed to a string.
In short, if you run the above code the following will display:
-
visit
/Response:
req.session.testObjId has type object - NOW REFRESH THIS PAGE -
visit
/againResponse:
req.session.testObjId now has type string - WHY A STRING?
Why did it transform to a string?
所有评论(0)