現在、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-moduleを直接使用してdb接続を2回定義する必要がありますか?
最後に、私は以前に与えられたすべての答えを少し使用しています:
要件:
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に2回接続します。
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);
});
含めてください
app.use(express.cookieParser());
直前
app.use(express.session({
それ以外の場合、以下のエラーがスローされます。
TypeError:未定義のプロパティ「connect.sid」を読み取ることができません
これをセットアップして_connect-mongodb
上記のmongoose接続コードが以前に実行されていると仮定します。
app.use(express.session({
secret: 'topsecret',
maxAge: new Date(Date.now() + 3600000),
store: new mongoStore({ db: mongoose.connections[0].db })
}));
Express 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
itを使用し、session
を構成するときにMongoStore
を使用する必要があります。
connect-mongodb
はMongooseを使用せず、node-mongodb-native
ドライバーを使用します(i.e.:npm install mongodb
)。 Mongooseもこのドライバーに依存しているため、存在する必要があります。
コードを直接 で見ると、DB接続情報をMongoStore
オブジェクトとして提供する必要があります。
store: new mongoStore({ Host: 'session_server', port: 27017, db: 'seesion', collection: 'sessions' })
通常、このために、動的にロードできる「dev」オブジェクトまたは変数が必要になります(dev vs test vs prod)。次に、その構成オブジェクトからHost/port/db/authを取得します。
接続の詳細(ホスト、ユーザー名、パスワードなど)のオブジェクトを渡すことができます。
Mongodb:// user:[email protected]/db_nameのような接続URLを渡すこともできます。
これらのメソッドは両方とも、すでにMongoose接続を持っているかどうかに関係なく、自動的に新しい接続を開始します。
最新のコードでは、mongodb.Db
のインスタンスである既存の接続にハンドルを渡すことができます。 mongooseの場合、これはmongoose.connection.db
になります。ただし、このコードは実際のリリースには含まれていないため、試したときに機能しませんでした。おそらくまだ使用する準備ができていない(またはテストされていない)。
次のリリースを待つと、既存のmongoose接続を渡すことができると確信しています。それまでは、mongooseからの接続とconnect-mongodbからの接続という2つの接続を受け入れる必要があります。
https://github.com/tedeh/connect-mongodb から接続情報を取得し、ソースの表示からハンドル情報を取得しました(- relevant commit )。
mongoose-session に出くわしました
非常に軽量で、シームレスに機能しました。 githubから...
インストール
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)
}));