Why does a session parameter with type ObjectID (MongoDB) transform to a
string?
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 / again
Response: req.session.testObjId now has type string - WHY A STRING?
Why did it transform to a string?
No comments:
Post a Comment