无法连接到远程数据库

时间:2019-05-31 09:43:20

标签: node.js mongodb ubuntu-18.04

本地配置: Node.js 12.2.0

服务器配置: VPS Ubuntu 18.04 MongoDB 3.2.22

有用于连接到远程mongodb数据库的基本脚本。这将返回错误-Cannot read property 'db' of null.

admintest个数据库。 对于管理员数据库,我创建了一个用户

db.createUser(
  {
    user: "root",
    pwd: "passw0rd",
    roles: [ { role: "root", db: "admin" } ]
  }
)

节点app.js

// app.js

const MongoClient = require("mongodb").MongoClient;

// const url = "mongodb://root:passw0rd@46.173.213.195:27017/admin";
const url = "mongodb://46.173.213.195:27017/test";
const mongoClient = new MongoClient(url, { useNewUrlParser: true });

mongoClient.connect(function(err, client){      
    const db = client.db("admin");
    const collection = db.collection("users");
    let user = {name: "Tomy", age: 23};
    collection.insertOne(user, function(err, result){        
        if(err){ 
            return console.log(err);
        }
        console.log(result.ops);
        client.close();
    });
});
// package.json

{
   "name": "mongoapp",
   "version": "1.0.0",
   "dependencies": {
      "express": "^4.16.0",
      "body-parser": "^1.18.0",
      "mongodb": "^3.1.0"
   }
}

两个网址均返回错误。

我尝试过的:

  1. 将bindIp更改为任何
///nano etc/mongod.conf

# network interfaces
net:
  port: 27017
#  bindIp: 127.0.0.1
  bindIp: 0.0.0.0

  1. sudo netstat -ntlp | grep LISTEN
tcp    0    0 0.0.0.0:27017      0.0.0.0:*    LISTEN      17184/mongod
...
...
  1. 将此代码应用于iptables
iptables -A INPUT -s 185.228.232.150 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 185.228.232.150 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
  1. sudo systemctl status mongodb告诉数据库工作正常

任何人都可以帮忙吗? 可以从您的计算机上测试代码。

更新: 根据该帖子https://www.mkyong.com/mongodb/mongodb-bind-failed-errno99-cannot-assign-requested-address-for-socket/的说法,bindIp不应等于服务器IP。

2 个答案:

答案 0 :(得分:0)

您的数据库运行良好,应用程序也运行良好。问题在于应用于DB网络通信。请检查以下几点(假设您的数据库在46.173.213.195上运行)

  1. 数据库主机:检查是否在远程数据库主机中正确定义了必要的入站规则。这意味着数据库主机允许来自应用程序IP等的端口27017。
  2. 数据库主机:将“绑定IP”更改为46.173.213.195
  3. 应用程序主机:Telnet 46.173.213.195:27017。

现在,如果您的telnet成功,则应用程序也应该能够通信远程数据库。

答案 1 :(得分:0)

我不知道-它刚刚开始起作用。 bindIp:0.0.0.0

我认为,经过一堆重新加载和配置更新