无法通过NodeJ连接到我的MongoDB EC2实例

时间:2018-08-09 10:32:13

标签: node.js mongodb amazon-web-services amazon-ec2

我们有一个带有NodeJs 8.11.3的EC2 MongoDb 4.0.1实例,当我尝试访问远程MongoDb时,我得到了TimeOutError

var url = "mongodb://admin:pw@xxx-xx-xxx-xx-x.eu-central-1.compute.amazonaws.com:27017";

MongoClient.connect(url, (err, database) => {
    if (err) return console.log(err);
    db = database.db(dbName);

    app.listen(3000, function() {
        console.log("listen 3000");
    })
});

我已经设置了管理员,注释了bind_ip文件中的mongo.conf字段,并为安全组中的27017端口设置了入站规则。

然后我想通过"mongodb://admin:pw@127.0.0.1:27017"在本地连接 我收到“无法连接到服务器...”错误。

任何建议以及如何解决?

1 个答案:

答案 0 :(得分:2)

您尚未指定数据库,请替换

"mongodb://admin:pw@127.0.0.1:27017" 

作者

 "mongodb://admin:pw@127.0.0.1:27017/myDatabaseName"

此外,如果您使用用户名和密码,则必须具有一个身份验证数据库,必须在您的连接行中使用 authSource 指定该数据库:

我假设您的身份验证数据库名称为“ admin”

"mongodb://admin:pw@127.0.0.1:27017/myDatabaseName?authSource=admin"

如果您的所有信息正确无误,您必须能够使用以下命令将Shell直接连接到您的身份验证数据库:

mongo admin -u admin -p pw --host 127.0.0.1 --port 27017

使用以下命令访问数据库:

mongo myDatabaseName -u admin -p pw --host 127.0.0.1 --port 27017

使用用户和密码连接到远程数据库的标准过程如下:

在您的EC2服务器上:

首先,确保您的27017端口已打开。

连接您的外壳

    $ mongo --port 27017

创建管理员用户myAdmin,密码为Test1234:

    > db.createUser({user: "myAdmin", pwd: "Test1234", roles:[{role: "userAdminAnyDatabase", db: "admin"}]})

从mongo注销

对mongod.config文件启用身份验证并禁用本地绑定:

security:
    authorization: enabled

#  bindIp: 127.0.0.1

重启mongod:

sudo service mongod restart

您必须能够执行以下操作:

与进行连接时进行身份验证:

 mongo --port 27017 -u "myAdmin" -p "Test1234" --authenticationDatabase "admin"

或连接然后进行身份验证:

 mongo --port 27017

 > use admin
 switched to db admin
 > db.auth("myAdmin", "Test1234")

然后,您必须能够创建用户,首先以admin身份验证:

 mongo --port 27017 -u "myAdmin" -p "Test1234" --authenticationDatabase "admin"

然后为数据库“ myDb”创建用户myUser,其密码为Abcd1234。

db.createUser({user: "myUser", pwd: "Abcd1234", roles:[{role: "readWrite", db: "myDb"}]})

那么您必须能够与myDb数据库上的新用户本地连接

 mongo myDb --port 27017 -u "myUser" -p "Abcd1234" --authenticationDatabase "admin"

然后确认没有身份验证就不能使用mongo:

  mongo myDb --port 27017

  > show collections

    "ok" : 0,
    "errmsg" : "not authorized on myDb to execute command { listCollections: 1.0, filter: {} }",
    "code" : 13

您现在可以尝试远程连接:

在您的本地shell上,只需将主机添加到您的连接线即可:

 mongo myDb --port 27017 -u "myUser" -p "Abcd1234" --authenticationDatabase "admin" --host 164.X.X.X

在nodejs上,您只需要向连接线添加这些参数即可:

"mongodb://myUser:Abcd1234@164.X.X.X:27017/myDb?authSource=admin"