gpt4 book ai didi

node.js - MongoDB:在集合上设置 TTL 索引时出错: session

转载 作者:IT老高 更新时间:2023-10-28 13:06:19 28 4
gpt4 key购买 nike

最初,此错误消息开始出现的频率非常低,但开始出现得更频繁,现在出现 4/5 次我运行我的应用程序。

我正在使用 Mongo 处理我的 session 存储,据我了解,TTL 索引用于使 session 数据过期。

/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,并且我正在使用 0.4.0 版本的 connect-mongo

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

最佳答案

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

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

使用connect-mongo的回调示例

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

简单的 Mongoose 示例

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

关于node.js - MongoDB:在集合上设置 TTL 索引时出错: session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com