本地配置: Node.js 12.2.0
服务器配置: VPS Ubuntu 18.04 MongoDB 3.2.22
有用于连接到远程mongodb数据库的基本脚本。这将返回错误-Cannot read property 'db' of null.
有admin
和test
个数据库。
对于管理员数据库,我创建了一个用户
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"
}
}
两个网址均返回错误。
我尝试过的:
///nano etc/mongod.conf
# network interfaces
net:
port: 27017
# bindIp: 127.0.0.1
bindIp: 0.0.0.0
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 17184/mongod
...
...
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
告诉数据库工作正常任何人都可以帮忙吗? 可以从您的计算机上测试代码。
更新: 根据该帖子https://www.mkyong.com/mongodb/mongodb-bind-failed-errno99-cannot-assign-requested-address-for-socket/的说法,bindIp不应等于服务器IP。
答案 0 :(得分:0)
您的数据库运行良好,应用程序也运行良好。问题在于应用于DB网络通信。请检查以下几点(假设您的数据库在46.173.213.195上运行)
现在,如果您的telnet成功,则应用程序也应该能够通信远程数据库。
答案 1 :(得分:0)
我不知道-它刚刚开始起作用。 bindIp:0.0.0.0
我认为,经过一堆重新加载和配置更新