node.js + express + mongodb曾经尝试过使用快递'会话管理与副本集

时间:2011-09-08 16:21:55

标签: mongodb node.js express mongoose

我正在使用

  • node 0.4.11
  • 表示2.4.6
  • mongodb 1.8.3
  • mongoose 2.1.2
  • connect-mongodb 1.0.0

并尝试使用身份验证实现副本集。

  1. 我想在DB中存储不同类型的应用程序数据
  2. 我想将快递'会话数据存储在数据库
  3. 与mongoose的“正常”连接正在起作用:

    mongo.connectSet('mongodb://user:secret@host:27017/test, 
                      mongodb://host:27018, 
                      mongodb://host:27019, 
                      mongodb://host:27020', function (err) {
        if (err) {
            console.log("could not connect to DB: " + err);
        }
    });
    

    但是如何让会话管理工作?!

    app.use(express.session({
                cookie: {maxAge: 60000 * 20}, // 20 minutes
                secret: 'foo',
                store: new MongoStore({
                    host: 'host',
                    port: [27017, 27018, 27019, 27020],
                    dbname: 'test',
                    rs_name: 'rstest',
                    username: 'user',
                    password: 'secret'
                })
              }));
    

    这不起作用:(

    这实际上是可能的吗?或者我应该使用不同的mongodb来存储会话数据?

1 个答案:

答案 0 :(得分:3)

您确定使用的是connect-mongodb而不是connect-mongo吗?

我没有看到这些参数可以与connect-mongodb一起使用。

不要传递连接设置。 connect-mongodb可以改为使用直接db变量,这是mongodb.Db的一个实例。

这意味着你可以使用mongoose使用的相同连接,而不是让connect-mongodb为会话创建一个新连接。

对于mongoose,可以在mongoose.connection.db找到mongodb.Db实例。

因此,使用您的代码作为示例(假设mongo是您的猫鼬对象):

app.use(express.session({
            cookie: {maxAge: 60000 * 20}, // 20 minutes
            secret: 'foo',
            store: new MongoStore({db: mongo.connection.db})
          }));