pky*_*eck 37 session mongoose mongodb node.js express
现在我将会话数据存储在与connect(express)捆绑在一起的"内存存储"中.但是我想/必须改变这个以进行生产.
该应用程序正在使用mongodb,我安装了mongoose来处理所有数据库通信.
例如,在初始化我的应用程序后连接到数据库:
var mongo = require('mongoose');
mongo.connect('mongodb://localhost/myDb');
mongo.connection.on('open', function () {
app.listen(3000);
}
Run Code Online (Sandbox Code Playgroud)
我找到了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' })
}));
Run Code Online (Sandbox Code Playgroud)
或者我是否必须直接使用mongodb-module定义我的数据库连接?
pky*_*eck 42
最后我使用了之前给出的一些答案:
要求:
var express = require('express'),
MongoStore = require('connect-mongo')(express),
mongo = require('mongoose');
Run Code Online (Sandbox Code Playgroud)
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'
};
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样配置它:
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);
// ...
});
Run Code Online (Sandbox Code Playgroud)
最后使用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);
});
Run Code Online (Sandbox Code Playgroud)
Raj*_*aja 27
请包括
app.use(express.cookieParser());
Run Code Online (Sandbox Code Playgroud)
直接之前
app.use(express.session({
Run Code Online (Sandbox Code Playgroud)
否则抛出错误如下,
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 })
}));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36448 次 |
最近记录: |