【发布时间】:2016-11-07 12:02:29
【问题描述】:
我正在尝试捕捉mongodb 断开连接事件。
它适用于以下设置:
simple.js
'use strict';
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/pnsockets', function () {
console.log('mongoose connected');
});
mongoose.connection.on('disconnected', function () {
console.log('mongoose disconnected');
});
如果simple.js 正在运行并且我停止mongodb (launchctl stop homebrew.mxcl.mongodb),我会在控制台上看到mongoose disconnected,我可以处理这个问题。
但运行 extended.js 即使用 socket.io-adapter-mongo,当我杀死 mongodb 时,我收到以下错误:
/project/node_modules/mongoose/node_modules/mongodb/lib/utils.js:98
process.nextTick(function() { throw err; });
^
MongoError: server localhost:27017 timed out
at null.<anonymous> (/project/node_modules/mongodb-core/lib/topologies/server.js:436:40)
at emitTwo (events.js:87:13)
at emit (events.js:172:7)
at null.<anonymous> (/project/node_modules/mongodb-core/lib/connection/pool.js:144:10)
at g (events.js:260:16)
at emitTwo (events.js:87:13)
at emit (events.js:172:7)
at Socket.<anonymous> (/project/node_modules/mongodb-core/lib/connection/connection.js:172:12)
at Socket.g (events.js:260:16)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at TCP._onclose (net.js:468:12)
extended.js
'use strict';
var mongoose = require('mongoose');
var socketIO = require('socket.io');
var MongoAdapter = require('socket.io-adapter-mongo');
mongoose.connect('mongodb://localhost:27017/pnsockets', function () {
console.log('mongoose connected');
_setupSocketAdapter();
});
mongoose.connection.on('disconnected', function () {
console.log('mongoose disconnected');
});
var _setupSocketAdapter = function () {
var io = socketIO();
var socket = mongoose.connections[0].db;
socket.connection = mongoose.connections[0]; // mubsub will need this line
var mongoAdapter = MongoAdapter({socket: socket});
io.adapter(mongoAdapter);
};
如何捕获MongoError: server localhost:27017 timed out 错误?
【问题讨论】:
-
您好,您尝试过收听
timeout事件吗?如果您找不到源代码,以下是引发该错误的行:github.com/mongodb/node-mongodb-native/blob/2.1/lib/… -
嘿@PatrickRoberts,是的,我已经尝试捕获所有
timeout、close和error事件,实际上我可以捕获close,但我仍然得到了之后出错,进程退出。 -
你有完整的错误堆栈输出吗?
-
嘿@YuriZarubin,谢谢你的评论,我已经用完整的错误堆栈更新了这个问题。
-
try catch 块不起作用,因为错误是异步的。
标签: javascript node.js mongodb socket.io