38

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

アプリケーションはmongodbを使用しており、すべてのdb-communicationsを処理するために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-moduleを直接使用してdb接続をもう一度定義する必要がありますか?

4

7 に答える 7

42

最後に、以前に与えられたすべての回答を少し使用しています:

  • 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);
});
于 2011-07-26T15:07:07.617 に答える
27

含めてください

app.use(express.cookieParser());

直前

app.use(express.session({

それ以外の場合は、次のようにエラーがスローされます。

TypeError: 未定義のプロパティ 'connect.sid' を読み取れません

于 2011-09-05T09:29:42.063 に答える
7

connect-mongodb上記のマングース接続コードが以前に実行されていると仮定すると、これを実行してセットアップできるようです。

app.use(express.session({
  secret: 'topsecret',
  maxAge: new Date(Date.now() + 3600000),
  store: new mongoStore({ db: mongoose.connections[0].db })
}));
于 2011-07-25T18:11:34.277 に答える
3

エクスプレス 4x の場合:

var express = require('express'),
    session = require('express-session'),
    MongoStore = require('connect-mongo')(session),
    mongo = require('mongoose');

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(session({
    secret: conf.secret,
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(conf.db)
  }));
});

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

sessionは独自のモジュールに移動されているため、構成するときにrequireそれを使用する必要があります。sessionMongoStore

于 2014-07-02T23:16:31.697 に答える
3

そのconnect-mongodbため、Mongoose は使用せず、node-mongodb-nativeドライバー ( ie npm install mongodb :) を使用します。Mongoose もこのドライバーに依存しているため、存在するはずです。

コードを直接見ると、DB 接続情報をMongoStoreオブジェクトとして提供する必要があります。

store: new mongoStore({ host: 'session_server', port: 27017, db: 'seesion', collection: 'sessions' })

通常、これには、動的にロードできる「構成」オブジェクトまたは変数が必要です (dev vs test vs prod)。次に、その構成オブジェクトから host/port/db/auth をプルします。

于 2011-07-25T18:03:03.293 に答える
1

接続の詳細 (ホスト、ユーザー名、パスワードなど) のオブジェクトを渡すことができます。

mongodb://user:pass@host.com/db_name のような接続 URL を渡すこともできます。

これらの方法は両方とも、マングース接続を既に持っているかどうか、または開始するかどうかに関係なく、新しい接続を自動的に開始します。

最新のコードでは、ハンドルを既存の接続 ( のインスタンス) に渡すことができますmongodb.Db。マングースの場合、これはmongoose.connection.db. しかし、このコードは実際のリリースにはなく、試してみるとうまくいきませんでした。おそらくまだ使用する準備ができていません (またはテストされていません)。

次のリリースを待てば、既存のマングース接続を渡すことができると確信しています。当面は、mongoose からの接続と connect-mongodb からの接続の 2 つの接続を受け入れる必要があります。

https://github.com/tedeh/connect-mongodbから接続情報を取得し、ソース (関連するコミット)を表示してハンドル情報を取得しました。

于 2011-07-25T22:15:30.207 に答える
0

私はマングースセッションに出くわしました

非常に軽量で、シームレスに機能しました。ギブハブから...

インストール

npm install mongoose-session

使用する

var express = require('express');

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/db');

var app = express();

app.use(require('express-session')({
    key: 'session',
    secret: 'SUPER SECRET SECRET',
    store: require('mongoose-session')(mongoose)
}));
于 2014-07-04T13:01:11.893 に答える