首页 > 解决方案 > 无法连接到远程数据库

问题描述

本地配置: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" } ]
  }
)

节点应用程序.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 更改为 any
///nano etc/mongod.conf

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

  1. sudo netstat -ntlp | grep 听
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告诉 db 运行良好

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

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

标签: node.jsmongodbubuntu-18.04

解决方案


我不知道如何 - 它刚刚开始工作。绑定IP:0.0.0.0

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


推荐阅读