当前位置:  开发笔记 > 编程语言 > 正文

node.js + express.js:使用mongodb/mongoose进行会话处理

如何解决《node.js+express.js:使用mongodb/mongoose进行会话处理》经验,为你挑选了3个好方法。

现在我将会话数据存储在与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定义我的数据库连接?



1> pkyeck..:

最后我使用了之前给出的一些答案:

我从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);
});


对于任何试图最近工作的人来说:似乎从v0.1.9开始,你需要将express设置为varilable(`var express = require('express')`)然后将其传递给connect-mongo( `var MongoStore = require('connect-mongo')(express)`).这是因为express公开了connect的所有底层部分,而connect-mongo实际上是一个以连接对象作为参数的函数.

2> Raja..:

请包括

app.use(express.cookieParser());

直接之前

app.use(express.session({

否则抛出错误如下,

TypeError:无法读取未定义的属性"connect.sid"


这拯救了生命.互联网是错误的 - 结果的顶部没有一个例子甚至暗示这一点.
感谢提示,但下次,只需编辑我的答案并添加缺失的行,以便其他人不必阅读另一个答案...

3> Peter Lyons..:

看起来您可以这样设置,connect-mongodb假设您的上面的mongoose连接代码先前运行:

app.use(express.session({
  secret: 'topsecret',
  maxAge: new Date(Date.now() + 3600000),
  store: new mongoStore({ db: mongoose.connections[0].db })
}));

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有