当前位置: 首页 > 面试题库 >

MongoDB:在集合:会话上设置TTL索引时出错

谢豪
2023-03-14
问题内容

最初,此错误消息开始很少出现,但开始出现得更规则,现在运行应用程序时出现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
}));

根据db.version()Mongo shell的说法,我正在运行2.4.9,并且正在使用0.4.0版connect-mongo

似乎有很多人遇到了这个问题,但是似乎大多数人都解决了证书问题,我的本地mongo没有经过身份验证的保护,所以这不是问题。有任何想法吗?


问题答案:

正如我在您的评论中所说,本质上Express在会话存储完全连接之前就已接收连接。解决方案是等待连接发生,然后再允许您的应用程序开始监听。

您可以通过在创建MongoStore时使用回调或传入已经处于活动状态的连接来避免此问题。

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();
});

简单的猫鼬例子

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();
});


 类似资料:
  • 问题内容: 我可以看到文档说我们可以在文档上设置,但不能在索引/索引上设置。还想知道如果我们设置它是否对性能有影响。 问题答案: 已为每个索引启用,但有效期为每个文档。 如果您希望索引“过期”,请删除它们。更简单,更高效。 是的,对性能有影响。Elasticsearch处理“过期”数据的“方式”是创建基于时间的索引。意思是,您每天或每周都会创建一个索引。在该索引中索引属于该日/周的所有内容。您决定

  • 我正在尝试在MongoDb中插入数据并在ES上查看 mongo db中的数据在db:testmongo collection:person中 现在,当我做的时候 我得到了 但在浏览器上键入时 谢谢

  • 我有几个集合共享以下相同的简单模式: 现在,我用Spring boot ' @ Document(collection = " XYZ ")'注释指定访问集合。因此,我必须在“@Document”注释本身中指定我的集合。然而,我更喜欢在我的SpringBoot配置文件中包含所有配置。 那么,问题是,有没有办法通过 application.properties 文件来配置“XYZ”?或者还有什么机制

  • 有人能识别出以下代码的错误吗。特别是第一条dbms_输出线。第二张打印得很好。但第一个错误是: 第2行ORA-06550错误:第15行,第53列:PLS-00201:标识符“MYCOLL”必须声明ORA-06550:第15行,第1列:PL/SQL:忽略语句

  • 我正在使用spring Boot编写rest API。我正在努力维护redis服务器上的用户会话。Redis在默认端口上启动并运行。我已经使用lettuce jar连接到redis服务器。但是好像我的会话没有在redis服务器上设置。我尝试使用uuid设置会话对象,它返回如下所示 从redis cli,我能够设置和获得关键值。 这是一个代码片段,我试图查看用户是否已经登录,取决于他们的活动会话,如

  • 问题内容: 我在服务层方法上使用注释。 当我紧急加载@OneToMany集合字段时,一切工作正常,但是当我尝试访问LAZY加载的元素时,我发现Hibernate 对象为null。这显然给了我一个例外: 这是我的收藏字段: 我如何绑定hibernate会话以便将对象延迟加载到上下文中? 编辑 这是我的trancactionManager / entityManager配置 问题答案: 使用Threa