最初,这个错误消息开始很少出现,但开始更频繁地出现,现在在我运行应用程序时出现了4/5次.

我用Mongo处理会话存储,据我所知,TTL索引用于使会话数据过期.

/home/dan/dev/audio-wave/node_modules/connect-mongo/lib/connect-mongo.js:161
            throw new Error('Error setting TTL index on collection : ' + s
                  ^
Error: Error setting TTL index on collection : sessions
at /home/dan/dev/audio-wave/node_modules/connect-mongo/lib/connect-mongo.js:161:23
at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1404:28
at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1542:30
at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:159:22
at commandHandler (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:678:48)
at Db._executeQueryCommand (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1802:12)
at Cursor.nextObject (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:729:13)
at Cursor.toArray (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:158:10)
at Cursor.toArray (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/scope.js:10:20)
at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1541:65

下面是将其连接在一起的代码

var sessionStore = new MongoStore({ db: 'audio-drop' })
  , cookieParser = express.cookieParser('waytoblue')
  , SessionSockets = require('session.socket.io')
  , sockets = new SessionSockets(io, sessionStore, cookieParser);

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.logger('dev'));
app.use(cookieParser);
app.use(express.session({
  store: sessionStore
}));

根据Mongo shell的db.version(),我运行的是2.4.9,我使用的是connect-mongo的0.4.0版.

似乎有很多人遇到了这个问题,但他们中的大多数人似乎都解决了凭证问题,我的本地mongo没有身份验证,所以这不可能是问题所在.有什么 idea 吗?

推荐答案

正如我在您的 comments 中所说,本质上,Express在会话存储完全连接之前就已经收到了连接.解决方案是在允许应用程序开始侦听之前等待连接发生.

通过在MongoStore创建时使用回调,或者传入一个已经处于活动状态的连接,可以避免这个问题.

Example using connect-mongo's Callback

var sessionStore = new MongoStore({ url: 'someConnectionUrl', db: 'audio-drop' }, function(e) {

  var cookieParser = express.cookieParser('waytoblue');
  app.use(cookieParser);

  app.use(express.session({
    store: sessionStore
  }));

  app.listen();
});

Simple Mongoose Example

var mongoose = require('mongoose');

mongoose.connect('localhost', function(e) {
  // If error connecting
  if(e) throw e;

  var sessionStore = new MongoStore({ mongoose_connection: mongoose.connection }),
      cookieParser = express.cookieParser('waytoblue');

  app.use(cookieParser);

  app.use(express.session({
    store: sessionStore
  }));

  app.listen();
});

Mongodb相关问答推荐

通过mongoDB中的查找从管道中删除被阻止的用户

在MogoDB中按时间间隔分组、统计文档和获取间隔时间

如何在MongoDB中使用Aggregation来计算两个键相同但字段不同的对象数组的总值,并将其合并为一个?

MongoDB:如何获取多个$indexOfArray值?

使用 multer 在我的 MERN 前端显示 MongoDB 图像的正确语法是什么?

按数组mongodb中的第一个元素排序

定期自动轮换 MongoDb 集合

用Golang减go mongodb中的两个字段

Mongo:投影不影响布尔值

mongodb:多键索引 struct ?

MongoDB C# 驱动程序 - 如何将 _id 存储为 ObjectId 但映射到字符串 Id 属性?

Mongoose 架构引用和未定义类型ObjectID

如何将查询结果(单个文档)存储到变量中?

mongo - 如何查询嵌套的 json

Mongodb KeyFile 太开放权限

使用 Spring Security + Spring 数据 + MongoDB 进行身份验证

使用 MongoDB 的 map/reduce 来分组两个字段

Mongodb 按字段名称查找任何值

MongoDb:聚合 $lookup 过滤外部文档

我可以只获取 Cursor 对象(pymongo)中的第一项吗?