我使用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()
以查看请求端点是什么,如果请求是我想要会话的对象之一,则设置会话。但是,在更改了我上面的代码之后,这会立即破坏我的应用程序。下面我有:
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()
离开app.use
并进入它自己的方法之后,req.sessionundefined
和我的应用程序中断了。知道为什么会这样吗?
此外,这是停止在对 API 的每个请求中存储会话的好方法吗?