现在我将会话数据存储在与connect(express)捆绑在一起的"内存存储"中.但是我想/必须改变这个以进行生产.
该应用程序正在使用mongodb,我安装了mongoose来处理所有数据库通信.
例如,在初始化我的应用程序后连接到数据库:
var mongo = require('mongoose'); mongo.connect('mongodb://localhost/myDb'); mongo.connection.on('open', function () { app.listen(3000); }
我找到了connect-mongodb模块,但我不知道如何使用mongoose实现它,或者它实际上是否可行?我需要添加这样的东西:
var mongoStore = require('connect-mongodb'); // ... app.use(express.session({ secret: 'topsecret', maxAge: new Date(Date.now() + 3600000), store: new mongoStore({ db: 'myDb' }) }));
或者我是否必须直接使用mongodb-module定义我的数据库连接?
最后我使用了之前给出的一些答案:
我从connect-mongodb切换到connect-mongo模块
我正在使用常规conf对象来存储我的配置数据
有两个数据库连接,因为它更容易为我处理(如果/当一个新版本的mongoose/express出来时,可能会在以后更改)
要求:
var express = require('express'), MongoStore = require('connect-mongo')(express), mongo = require('mongoose');
conf对象:
var conf = { db: { db: 'myDb', host: '192.168.1.111', port: 6646, // optional, default: 27017 username: 'admin', // optional password: 'secret', // optional collection: 'mySessions' // optional, default: sessions }, secret: '076ee61d63aa10a125ea872411e433b9' };
然后我可以像这样配置它:
app.configure(function(){ // ... app.use(express.cookieParser()); app.use(express.session({ secret: conf.secret, maxAge: new Date(Date.now() + 3600000), store: new MongoStore(conf.db) })); // important that this comes after session management app.use(app.router); // ... });
最后使用mongoose第二次连接到mongodb:
var dbUrl = 'mongodb://'; dbUrl += conf.db.username + ':' + conf.db.password + '@'; dbUrl += conf.db.host + ':' + conf.db.port; dbUrl += '/' + conf.db.db; mongo.connect(dbUrl); mongo.connection.on('open', function () { app.listen(3000); });
请包括
app.use(express.cookieParser());
直接之前
app.use(express.session({
否则抛出错误如下,
TypeError:无法读取未定义的属性"connect.sid"
看起来您可以这样设置,connect-mongodb
假设您的上面的mongoose连接代码先前运行:
app.use(express.session({ secret: 'topsecret', maxAge: new Date(Date.now() + 3600000), store: new mongoStore({ db: mongoose.connections[0].db }) }));