我使用mongoose将node.js与mongoDB连接,现在我写下面的查询
var trans = new transmodel({method: method, trans_id: r});
trans.save(function(err) {
if (err) {
console.error("Razor_pay_webhook Error 4 err: " + err);
res.write('statusCode: 200');
res.end();
} else {
res.write('statusCode: 400');
res.end();
}
});
我想当我的mongodb群落下来然后我会得到错误的#39;在执行上面的mongoose查询时,但当我在我的mongo集群关闭时运行上面的查询时没有发生任何事情(没有错误被调用)。任何人都可以告诉我如果我的mongodb服务器在我的查询中,我怎么能抓住错误。另外,为了再次与我的群集重新连接,我设置了以下参数,但我的节点服务器没有尝试再次与我的mongodb服务器重新连接,我不知道出了什么问题。
var mongoose = require('mongoose');
var config = require('./config/database.js');
var DB_URL = config.db.url;
mongoose.connection.on("connected", function(ref) {
console.log("Connected to " + " DB!");
});
mongoose.connection.on("error", function(err) {
console.error('Failed to connect to DB ' + ' on startup ', err);
if (err) {
return next(err);
}
});
mongoose.connection.on('disconnected', function(err) {
console.log('Mongoose default connection to DB :' + ' disconnected');
if (err) {
return next(err);
}
});
var gracefulExit = function() {
mongoose.connection.close(function () {
console.log('Mongoose default connection with DB :' + ' is disconnected through app termination');
process.exit(0);
});
}
process.on('SIGINT', gracefulExit).on('SIGTERM', gracefulExit);
exports.con_close = function () {
console.log('Mongoose connection disconnected');
mongoose.connection.close();
}
var options = {
server: {
socketOptions: {
keepAlive: 1000,
connectTimeoutMS: 30000
}
},
replset: {
rs_name: 'replicaset',
auto_reconnect:true,
socketOptions: {
keepAlive: 1000, // doubt about it
connectTimeoutMS: 30000
}
},
user: 'root',
pass: 'G3saGT2Y',
auth: {
authdb: 'admin'
}
}
mongoose.connect(DB_URL, options, function(err) {
console.log('ho rha hai');
if (err) {
console.log('error connection to mongo server!');
console.log(err);
}
});
答案 0 :(得分:1)
您正在使用mongoose,它会在数据库关闭时以及数据库重新连接并重新启动时发出事件(EventEmitter模式)。
从找到的{mongoose代码<{3>}我们可以看到库db连接 - here发出以下事件: * @param {Mongoose}基于一个猫鼬实例 * @inherits NodeJS EventEmitter
connection.js
* @event connecting
:在此连接上执行connection.{open,openSet}()
时发出。
@event connected
:此连接成功连接到数据库时发出。可能会在reconnected
场景中以多次次发出。
@event open
:在所有这些连接模型上执行connected
和onOpen
后发出。
@event disconnecting
:执行connection.close()
时发出。
@event disconnected
:与数据库断开连接后发出。
@event close
:我们在所有这些连接模型上执行disconnected
和onClose
后发出。
@event reconnected
:在我们connected
之后disconnected
之后发出,然后成功发送另一个成功的连接。
@event error
:在此连接上发生错误时发出。
@event fullsetup
:在副本设置场景中发生,主要和在
连接字符串中指定的至少一个seconaries已连接。
@event all
:在连接字符串中指定的所有节点连接时,在副本集方案中发出。
当数据库关闭时,您将收到两个事件: 断开连接 2.错误(驱动程序遇到的错误)
当数据库再次启动时,您将收到重新连接事件。
因此,您不需要尝试捕捉错误,而应该听取这些事件。
可以找到有关连接失败和重新连接的更多有用信息http://nodejs.org/api/events.html#events_class_events_eventemitter。
本文介绍如何根据您的设置使用和配置autoReconnect和bufferMaxEntries。