Error: Error setting TTL index on collection : sessions

时间:2021-12-14 04:14:21

            Error: Error setting TTL index on collection : sessions

一、步骤一:

这个问题一般是直接升级 mongodbconnect-mongo的版本为最新就可以了。

(注:记得一定要删除掉node_module再重新安装,因为你在package.json中对引用的模块进行改变版本号,也不会更新的,需要删除掉后再重新下载安装,自己就是在这步坑了~~ - -!)

二、步骤二:

如果上面的步骤无法解决问题,那么就进行该步骤:
检查express 配置session中间件的时候,是否配置正确。

因为自己就是因为配置不正确才导致报错的,我当时是在配置session的时候,加了点要求,需要将session信息保存到mongo数据库中去,而不是只是保存在内存中。正是因为配置要将session信息保存到数据库中去的配置错了。

如果不需要保存session信息到mongo数据库中,而只是存储在内存中的话,那么可以照API上的配置进行配置:

var session = require('express-session');
.....
/**
 * secret 用来防止篡改 cookie,
 * key 的值为 cookie 的名字,
 * 通过设置 cookie 的 maxAge 值设定 cookie 的生存期,
 * 这里我们设置 cookie 的生存期为 30 天.
 * resave : 是指每次请求都重新设置session cookie,假设你的cookie是10分钟过期,每次请求都会再设置10分钟 
 * saveUnitialized 是指无论有没有session cookie,每次请求都设置个session cookie,默认给个标识为connect.sid
*/ app.use(session({ secret: 'myblog', key: 'blog', cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 day resave:false, saveUninitialized: true }));

如果需要存储到mongo数据库中去,那么可以按照下面的方法进行配置:
因为我们在这里使用的 connect-mongo来保存session信息到mongo数据库中去的。
所以,我们可以参考: https://www.npmjs.com/package/connect-mongo

app.use(session({
    secret: settings.cookieSecret
    , key: settings.db
    , cookie: {maxAge: 1000 * 60 * 60 * 24 * 30}//30 day
    , resave: false
    , saveUninitialized: true
     ,store: new MongoStore({
         //url: 'mongodb://localhost:27017/blog'
        db:settings.db
        ,host:settings.host
        ,port:settings.port
     })
}));