我正在使用Express和Connect-Mongo管理我的Node.js / Socket.io应用程序的会话。
我查看了connect-mongo文档,我正在尝试初始化数据库连接,但每当我尝试在其中存储任何内容时,存储对象始终为null并崩溃。
这是我正在使用的代码片段:
var mongoserver = new mongodb.Server('localhost', mongodb.Connection.DEFAULT_PORT, {safe:true}) ;
var store ;
app.use(express.session({
secret: 'secret',
store: new MongoStore({ db: 'test'}, function(){
db = new mongodb.Db('test', mongoserver, { w: 1 }) ;
db.open(function(err, db){
if(err){console.log('DB error', err) ;}
db.collection('test', function(err, collection) {
console.log('Collection...') ;
});
db.on("close", function(error){
console.log("Connection to the database was closed!");
});
});
})
}));
io.sockets.on('connection', function (socket) {
store.set('test-sid', {foo:'bar'}, function(err, session) {}) ;
)};
所有其他变量(快速,服务器等)都正确初始化,应用程序出现,我在控制台中看到接受与mongo的连接。任何想法??
答案 0 :(得分:2)
您没有将商店存储在变量“store”中。它被传递到会话配置并设置为快速应用程序设置。
要解决此问题,您可以创建商店并将其分配给变量,然后将其作为设置添加,然后将其传递到会话配置中:
// Create the store
var store = new MongoStore(...);
// Pass into session creation
app.set(expression.session({
store: store
});
// You can now access the store from the variable as you expected
store.set('test-sid', {foo: 'bar'}, function(err, session) {});