Nodejs / Mongoose:猫鼬断开连接时的查询

时间:2018-08-23 13:13:09

标签: node.js mongodb express mongoose

我有一个使用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连接断开,有人可以帮助我找出我的代码中有什么问题来保护我的应用程序吗?

0 个答案:

没有答案