2

次のようにデータベースに接続します。

var mongoClient = new MongoClient(new Server('localhost', 27017, {auto_reconnect: true}));
mongoClient.open(function (err, mongoClient) {
  var db = mongoClient.db('db_name');
  db.authenticate('user', 'password', function () {err, result} {
     if (err || !result) return console.log('error');

     app.use(express.session({       
        store: new MongoStore({
          db: db
        })
     });
  });
}); 

また、MongoStore と db 接続を共有したいのですが、うまくいかないようです。どうすればいいですか?

編集:データベースで認証を使用していますが、 new MongoStore() get の実行後に次のエラーが発生します:

not authorized for query on site.system.indexes
4

1 に答える 1

5

これが私にとってどのように機能するかです。

var connectionString = "mongodb://username:password@localhost:27017/db_name";
var dbOptions = {
server:{
    'auto_reconnect': true,
    'poolSize': 20,
    socketOptions: {keepAlive: 1}  
    }
}
// For long running applictions it is often prudent to enable keepAlive. Without it,
// after some period of time you may start to see "connection closed" errors for what 
// seems like no reason.
MongoClient.connect(connectionString, dbOptions, function(err, db) {
    if(err){
        console.log(err);            
    }

app.use(express.session({
        store:new mongoStore({db: db}),
        secret: 'secret'
    }));
})

これは私にとって完璧に機能し、許可されていない問題も発生しません。以前は、keepAlive オプションを指定する必要はなく、それがなくても完全に機能しますが、長時間実行されるアプリケーション用の mongodb 2.4 のリリースでは、keepAlive オプションを指定する必要があります。そうしないと、接続が閉じられたり、承認されていない種類のエラーが発生したりし続けます。

于 2013-06-11T07:23:58.067 に答える