MongoClient实例连接状态判断:isConnected必填参数困惑求助
解决MongoClient isConnected()方法需要必填参数的问题
我来帮你搞定这个连接状态检查的问题~你遇到的情况是因为MongoDB Node.js驱动的isConnected()方法在某些版本中要求传入数据库名称作为必填参数,下面给你两种可行的解决方案:
方案1:传入默认数据库名称调用isConnected()
如果你使用的驱动版本确实要求传name参数,最简单的方式是传入'admin'——这是MongoDB默认的管理数据库,客户端初始化时会自动建立这个连接,用来判断整体连接状态非常可靠:
connect(): Promise<null> { const self = this; // 传入admin作为数据库名称参数 if (this.client && this.client.isConnected('admin')) { return Promise.resolve(null); } return MongoClient.connect(this.uri).then(function (client) { const db = client.db('local'); self.client = client; self.coll = db.collection('oplog.rs'); return null; }); }
当然,你也可以传入你实际使用的数据库名(比如这里的'local'),效果是一样的,只要该数据库的连接已建立即可。
方案2:使用新版驱动推荐的拓扑检查方式
在MongoDB Node.js驱动4.x及以上版本中,isConnected()方法已经被标记为废弃,官方更推荐通过客户端的拓扑对象来检查连接状态,这个方法不需要任何参数,判断结果也更准确:
connect(): Promise<null> { const self = this; // 检查拓扑的连接状态,无需参数 if (this.client && this.client.topology.isConnected()) { return Promise.resolve(null); } return MongoClient.connect(this.uri).then(function (client) { const db = client.db('local'); self.client = client; self.coll = db.collection('oplog.rs'); return null; }); }
小提示
你可以查看项目package.json里的mongodb依赖版本,确认自己属于哪种情况。如果是较新版本的驱动,优先用方案2,避免使用废弃方法带来的潜在问题。
内容的提问来源于stack exchange,提问作者user5047085
相关产品推荐
相关产品推荐

