I have an application using NodeJS, Express, MongoDB and connect-mongo.
My issue is that sessions don’t seem to be automatically deleted from MongoDB when they expire, so the db size grows until the disk is full.
The developer of connect-mongo wrote a comment:
connect-mongo will ask MongoDB to remove all the sessions that have expired before the current date.
But this doesn’t seem to be happening in my case.
My configuration is:
var express = require('express');
var MongoStore = require('connect-mongo');
var sessionStore = new MongoStore({db: 'myappsession'});
var app = express.createServer();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ secret: "myappsecret", store:sessionStore }));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
And I’m currently running the following versions:
I don't know from where the clear_interval
options was taken but I'm looking at the code of the latest version:
class MongoStore extends Store {
constructor(options) {
options = options || {}
/* Fallback */
if (options.fallbackMemory && MemoryStore) {
return new MemoryStore()
}
super(options)
/* Options */
this.ttl = options.ttl || 1209600 // 14 days
this.collectionName = options.collection || 'sessions'
this.autoRemove = options.autoRemove || 'native'
this.autoRemoveInterval = options.autoRemoveInterval || 10
this.transformFunctions = computeTransformFunctions(options, true)
// ...
setAutoRemoveAsync() {
const removeQuery = {expires: {$lt: new Date()}}
switch (this.autoRemove) {
case 'native':
return this.collection.createIndex({expires: 1}, {expireAfterSeconds: 0})
case 'interval':
this.timer = setInterval(() => this.collection.remove(removeQuery, {w: 0}), this.autoRemoveInterval * 1000 * 60)
this.timer.unref()
return Promise.resolve()
default:
return Promise.resolve()
}
}
So the correct way to set auto remove based on that code seems to be:
const store = new MongoStore({
url: "put db connection string here ...",
autoRemove: 'interval',
autoRemoveInterval: 60 * 24 // In minutes. Default
})
I dont see any trace of a clear_interval
option, so it seems to me the suggested solution would have no effect ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With