ユーザーのセッションを追跡するためにconnect-mongoとexpress-sessionを使用しています。セッションを設定する次のコードがあります。
app.use(session({
secret: 'scamp',
store: new MongoStore({
mongooseConnection: mongoose.connection,
ttl: 60 * 30 // half hour
})
}));
これに関する問題は、サーバーに送信されるすべてのリクエストに対してセッションが作成されることです。たとえば、Amazon Web Services を使用してアプリをホストし、10 秒ごとにサーバーにリクエストを送信して、まだ稼働していることを確認します (ヘルスチェックと呼ばれます)。ヘルス チェック リクエストは、mydomain/health への GET リクエストです。しかし、私が持っているコードを使用すると、リモート Mongo Db のセッション コレクションに保存される新しいセッションが作成されます。そのため、データベースは急速に巨大化します。
背景: 私のアプリでは、ユーザーがファイルをアップロードしてから、各ファイルを操作できます。ユーザーが対話しているCURRENTファイルをセッションで追跡するだけです(私のセッションでは、現在のファイルID、ファイルパス、選択された現在のファイルパラメーターなどを保持します)。したがって、基本的に、すべてではなく、API への特定のリクエストのセッションのみを設定したいと考えています。
だから私は自分のコードを書き直すと思った:
var setsession = function (req, res, next){
session({
secret: 'scamp',
store: new MongoStore({
mongooseConnection: mongoose.connection,
ttl: 60 * 30 // half hour
})
})
next();
};
app.use(setsession);
setSession()
次に、リクエストエンドポイントが何であるかを確認するためにチェックを行い、リクエストがセッションを必要とするものの1つである場合はセッションを設定することを計画していました。ただし、上記のコードを変更すると、すぐにアプリが壊れます。以下に私が持っています:
app.get('/api/canvas', function(req, res) {
sess = req.session;
var callback = function() {
graphController.constructGraph();
};
console.log('req.session is ', req.session);
var graphController = new GraphController(req, res, sess, callback);
});
今、独自のメソッドからsession()
出入りした後、 req.session があり、アプリが壊れます。なぜこれが起こっているのですか?app.use
undefined
また、これは、API へのすべてのリクエストでセッションが保存されないようにするための良い方法ですか?