【发布时间】:2019-05-02 05:50:42
【问题描述】:
我有 3 台服务器运行 MongoDB 副本集,1 台主服务器,1 台辅助服务器,1 台仲裁服务器。而且我在连接到这个副本集时遇到问题。使用在 localhost 和备用服务器上运行的 test.js 文件进行测试。
- 从本地主机连接,节点 6.5.0:OK
- 从本地主机连接,节点 10.15.1:失败
- 从备用服务器连接,节点 6.5.0:确定
- 从备用服务器连接,节点 10.15.1:OK
这是我的 test.js 文件:
const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://root:password"+
"@mgdb1.mydomain,mgdb2.mydomain/vApp?replicaSet=rs0&authSource=admin";
console.log("Connecting...");
MongoClient.connect(url,(err,client)=>{
if (err!=null){
console.log("Error:",err);
return;
}
console.log("Connected.");
process.exit();
});
奇怪的是,它显示 ECONNREFUSED 错误,但不是在副本集中 3 台服务器的 IP,它是我的 ISP 范围内的 IP。那么为什么它在连接后失败?显示TCPConnectWrap.afterConnect,是否表示已经建立连接?
错误是这样的:
Connecting...
(node:1412) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
Error: { Error: connect ECONNREFUSED 125.235.4.59:27017
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1104:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '125.235.4.59',
port: 27017 }
编辑:
我目前的解决方法是直接连接到主服务器而不使用 replicaset=rs0,但是,这不是所需的方式。
【问题讨论】:
-
尝试使用这个命令
const url = "mongodb://root:password"+ "@mgdb1.mydomain,mgdb2.mydomain/vApp?replicaSet=rs0&authSource=admin",{ useNewUrlParser: true } -
还是不行
标签: node.js database mongodb error-handling connection