gpt4 book ai didi

node.js - 无法连接到远程数据库

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:04 25 4
gpt4 key购买 nike

本地配置:Node.js 12.2.0

服务器配置:虚拟专用服务器乌类图18.04MongoDB 3.2.22

有连接到远程 mongodb 数据库的基本脚本。这将返回错误 - 无法读取 null 的属性“db”。

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

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

Node 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

  • sudo netstat -ntlp | sudo netstat -ntlp | sudo netstat -ntlp grep 听
  • tcp    0    0 0.0.0.0:27017      0.0.0.0:*    LISTEN      17184/mongod
    ...
    ...
  • 将此代码应用于 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
  • sudo systemctl status mongodb 告诉 db 运行良好
  • 有人可以帮忙吗?...可以在您的计算机上测试代码。

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

    最佳答案

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

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

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

    关于node.js - 无法连接到远程数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56392561/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com