当 mongodb 服务器关闭时如何在运行 mongoose 查询时捕获错误

2023-12-14

我正在使用 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 集群关闭时,我在执行上面的 mongoose 查询时会得到“err”,但是当我在 mongos 集群关闭时运行上面的查询时,什么也没有发生(没有调用任何错误)。谁能告诉我如果我的 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);
        }
    });

您正在使用 mongoose,当数据库关闭以及数据库重新连接并再次启动时,它会发出事件(EventEmitter 模式)。

从猫鼬代码中找到here我们可以看到库数据库连接 -连接.js

发出以下事件: * @param {Mongoose} 基于 mongoose 实例 * @inherits NodeJS EventEmitter

http://nodejs.org/api/events.html#events_class_events_eventemitter* @事件connecting: 发出时connection.{open,openSet}()在此连接上执行。

  • @event connected:当此连接成功连接到数据库时发出。可能会被排放multiple次在reconnected场景。

  • @event open: 在我们之后发出connected and onOpen在所有这些连接模型上执行。

  • @event disconnecting: 发出时connection.close()被处决。

  • @event disconnected:与数据库断开连接后发出。

  • @event close: 在我们之后发出disconnected and onClose在所有这些连接模型上执行。

  • @event reconnected: 在我们之后发出connected随后disconnected,随后又成功连接。

  • @event error:当此连接发生错误时发出。

  • @event fullsetup:在副本集场景中发出,当主节点和 at 时 连接字符串中指定的至少一个辅助节点已连接。

  • @event all:在副本集场景中,当连接字符串中指定的所有节点都已连接时发出。

当数据库关闭时,您将收到两个事件: 1. 断开连接 2. error(驱动程序遇到的错误)

当数据库再次启动时,您将收到重新连接事件。

因此,您不需要尝试捕获错误,而是应该监听这些事件。

可以找到有关连接失败和重新连接的更多有用信息here.

本文介绍如何根据您的设置使用和配置 autoReconnect 和 bufferMaxEntries。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 mongodb 服务器关闭时如何在运行 mongoose 查询时捕获错误 的相关文章

随机推荐