我有一个使用express和mongoose的nodejs应用程序: 节点v8.9.4 快递v4.15.5 猫鼬v5.2.9
以及以下代码
var mongoose_options = {
reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect
reconnectInterval: 500, // Reconnect every 500ms
poolSize: 10, // Maintain up to 10 socket connections
// If not connected, return errors immediately rather than waiting for reconnect
bufferMaxEntries: 0,
connectTimeoutMS: 10000, // Give up initial connection after 10 seconds
socketTimeoutMS: 30000, // Close sockets after 45 seconds of inactivity
useNewUrlParser: true,
keepAlive: true,
keepAliveInitialDelay: 300000
};
mongoose.set("bufferCommands", false); // disable buffer
mongoose.set("useFindAndModify", false); // fix depreciated option in mongoose 5.2.9
mongoose.set("useCreateIndex", true); // fix depreciated option in mongoose 5.2.9
mongoose.connect(config.database, mongoose_options);
app.get("/status", function (req, res) {
"use strict";
Config.findOne({
appname: appname
}, function (err) {
// si problème lors de l'interrogation de la base mongoDB
if (err) {
logger.log("%s | le %s est démarré mais l'accès à la base de données est impossible : %s", timestamp("DD-MM-YYYY hh:mm:ss:iii"), appname, JSON.stringify(err));
return res.status(500).send("le " + appname + " est démarré mais l'accès à la base de données est impossible");
}
return res.status(200).send(functions.gen_output("success", "le " + appname + " est démarré"));
});
});
在通常情况下,一切正常。但是,如果mongodb连接断开,并且节点应用收到http请求“ / status”,则该请求仍会挂起一段时间,即使我将buffer选项设置为禁用它。
快递错误处理在30秒后触发,我在控制台上收到以下消息
MongoError: failed to reconnect after 30 attempts with interval 1000 ms
猫鼬似乎没有使用我设置的选项。
如果mongodb连接断开,并且我检索了一个HTTP请求“ / status”,则在控制台中收到了消息:
MongoError: Topology was destroyed
如果mongodb连接断开,有人可以帮助我找出我的代码中有什么问题来保护我的应用程序吗?