node.js + express.js: mongodb/mongoose によるセッション処理 質問する

node.js + express.js: mongodb/mongoose によるセッション処理 質問する

現在、セッション データを connect(express) にバンドルされている「メモリ ストア」に保存しています。ただし、本番環境ではこれを変更する必要があります。

アプリケーションは mongodb を使用しており、すべての db 通信を処理するために mongoose をインストールしました。

例: アプリを初期化した後に DB に接続します。

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 モジュールを直接使用して、DB 接続をもう一度定義する必要がありますか?

ベストアンサー1

結局、私は以前に与えられたすべての回答を少しずつ使っています:

  • connect-mongodbからconnect-mongoモジュールに切り替えました
  • 一般的なconfオブジェクトを使用して設定データを保存しています
  • 私にとって扱いやすいように、2 つの DB 接続があります (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);
});

おすすめ記事