Lucas Engleder
Lucas Engleder

Reputation: 671

Error at connecting to MongoDb Atlas Server

So I'm currently wirting a web application and I need database so I decided to go with mongodb and mongoose. Until now I tested everything on localhost and it worked but I wanted to move the data to a server. I had heard of Atlas and registered myself and "uploaded" the data.

Now I want to connect to the cluster via a node.js app.

mongoose.connect('mongodb+srv://engllucas:p%[email protected]/test');

I got the string of the mongodb Atlas site at the point Connect Your Application

Then I swapped my password.

mongoose.connect('mongodb://engllucas:p%[email protected]/test');

This didn't work either.

Thats the error message:

{ MongoError: failed to connect to server [insight-shard-00-02-quhku.mongodb.net:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 18.194.163.64:27017]
at Pool.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\topologies\server.js:503:11)
at emitOne (events.js:115:13)
at Pool.emit (events.js:210:7)
at Connection.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\connection\pool.js:326:12)
at Object.onceWrapper (events.js:318:30)
at emitTwo (events.js:125:13)
at Connection.emit (events.js:213:7)
at TLSSocket.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\connection\connection.js:245:50)
at Object.onceWrapper (events.js:316:30)
at emitOne (events.js:115:13)
at TLSSocket.emit (events.js:210:7)
at emitErrorNT (internal/streams/destroy.js:64:8)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
  name: 'MongoNetworkError',

message: 'failed to connect to server [insight-shard-00-02-quhku.mongodb.net:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 18.194.163.64:27017]' } (node:4920) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): MongoNetworkError: failed to connect to server [insight-shard-00-02-quhku.mongodb.net:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 18.194.163.64:27017] (node:4920) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Upvotes: 37

Views: 81651

Answers (23)

user9111756
user9111756

Reputation:

If you are using mongoose prior to version 5.0.15:

The mongodb+srv:// uri is not valid to the underlying native driver.

just removing the +srv will not work either, as the uri will need to include your replica hosts and the replicaSet/authSource parameters.

You can either

  1. Upgrade to mongoose 5.0.15 and use the shorter +srv format

Or

  1. Use your current version with the full uri from your Atlas cluster dashboard, selecting the older driver (see note below) version uri.

from your cluster dashboard, press the connect button, then (assuming you have whitelisted your node server's IP ) select "connect your application", then press "I am using 3.4 driver or older". Use the resulting uri string substituting your password.

Note: In the dialog for choosing your URI string in the connect helper on the Atlas cluster dashboard, it says "I am using driver 3.* or (newer|older)". This is a poor choice of words, as the 3.6 and 3.4 don't refer to the driver version, but the server version. Further, using one version of the server or the other has nothing to do with the driver being used to connect, which is where the actual dependency lies that determines which version of the URI to use.

Upvotes: 6

Mustafa Salem
Mustafa Salem

Reputation: 1

the problem for me is that I was trying to create some seed data with the dropDatabase option set to true, and the privileges for the database user were read and write only.

After much research, I was able to fix the problem by giving the user custom rules from Database Access -> Edit -the user bar- -> Specific Privileges -> dbAdminAnyDatabase or dbAdmin and you specify the database.

Upvotes: 0

Saurabh Mahra
Saurabh Mahra

Reputation: 362

If you are a university student, you may not be able to connect to MongoDB Atlas because your university network has it blocklisted (just like multiplayer games). So if you have not tried yet, probably disconnect from the university internet network and test with mobile data via hotspot.

This solution worked for me (I am staying at IIT Bombay)

Upvotes: -1

VishalRajput
VishalRajput

Reputation: 21

if you are using aws console then, in the security group of your instance running, set inbound and outbound rule, set custom tcp for port 27017

Upvotes: 0

brohjoe
brohjoe

Reputation: 932

After numerous troubleshooting steps, I used my cell phone to tether to my computer to see if the issue was my ISP gateway. I was able to connect with no problems connecting with my phone. At that point, I knew it was an ISP issue. To connect using your ISP's internet, you have to open port 27017 on your gateway device. Search 'port forwarding' for your particular ISP to add port 27017 to the list of available ports. It's not open by default for some ISPs like mine. Good coding!

Upvotes: 1

Jay
Jay

Reputation: 406

If EveryOther options above mentioned failed, This is what I did

Just Made my Wifi Network to "PUBLIC" from "PRIVATE".

this fixed the last issue too

Upvotes: -1

I had the same problem, adding to white list and other solutions didn't help. But after I created another user. When creating a new user in the "Database User Privileges" field, I selected "Atlas admin" instead of default "Read and write to any database". After that, the connection worked

Upvotes: 1

Palak Agarwal
Palak Agarwal

Reputation: 1

Weird but changing password(one without special symbols) of cluster helped.

Upvotes: 0

grodd100
grodd100

Reputation: 31

I ended up resolving this issue by simply including "+srv" to the beginning of the connection string like so:

mongoose.connect("mongodb+srv://<username>:<password>@<address>/<database>?retryWrites=true&w=majority", {useNewUrlParser: true});

Which is weird because I found several answers instructing me to do the contrary. I guess I got my versions of mongoose mixed up.

Hope this helps someone.

Upvotes: 3

Rasna Agarwal
Rasna Agarwal

Reputation: 21

  • I also got the same error and i tried this one logic.
  • Apart from this in mongoDb atlas in netwrok Access , confirgure all ip address.And set it to ---------------- 0.0.0.0/0

Upvotes: 1

Ib Abayomi Alli
Ib Abayomi Alli

Reputation: 411

If you are connected to a hotspot and feels you have done everything correctly, disconnect and reconnect. Most especially switch off your internet connection and reconnect.

Upvotes: 2

SUBHADEEP SANGIRI
SUBHADEEP SANGIRI

Reputation: 11

I too had this similar issue. then changed

mongoose.connect(db, () => { }, { useNewUrlParser: true })
    .catch(err => {console.log(err);});

but produced error,

(node:5796) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

then changed the code to

mongoose.connect(db, { useNewUrlParser: true, useUnifiedTopology: true }, () => { })
        .catch(err => console.log(err));

This worked for me.

Upvotes: 1

Ali Bulut
Ali Bulut

Reputation: 304

I connected with vpn before I realized it. When I tried to connect to db later, I couldn't do it. I opened my own rope and all permissions in the permissions again. Then when I connected with vpm again, I was able to connect.

Upvotes: 0

Mukesh Arora
Mukesh Arora

Reputation: 1813

I also faced the similar issue while I was connecting MongoDB Compass to https://cloud.mongodb.com/ cluster.

The following steps resolve the issue.

  1. Visit google.com > Enter My IP Address > Copy the Public IP Address of your system/network
  2. Go to https://cloud.mongodb.com/ Cluster > Select Security > Network Access > Click on IP whilelist Tab > Add IP Address > Enter your public IP address.

Upvotes: 2

Emre Mutlu
Emre Mutlu

Reputation: 39

I was getting that problem and I fixed it. Below is the steps that I used:

  1. First of all add new user in mongodb (Security > Database Access > ADD NEW USER > )
  2. then write to .env file new username and password.
  3. Kill the server and rerun the server.

This is the solution that worked for me.

Upvotes: 1

Arunas Bart
Arunas Bart

Reputation: 2678

I had same problem, while IP whitelisting was set correctly!

The reason was, that MongoDB Enterprise Atlas requires SSL excryption layer trying to connect without that, produces non-reasonable and not self explanatory error like:

Failed to connect to mongodb-m0-nnxxx.mongodb.net:27017
No chance to Authorize

Trying to connect using mondodb client with IP whitelisting being the problem, error message like this is appearing:

mongo "mongodb+srv://mongodb-m0-nnxxx.mongodb.net/test" --username admin

DBClientConnection failed to receive message from mongodb-m0-shard-00-00-nnxxx.mongodb.net.:27017 - HostUnreachable: Connection closed by peer
Unable to reach primary for set mongodb-m0-shard-0
Cannot reach any nodes for set mongodb-m0-shard-0. Please check network connectivity and the status of the set. This has happened for 5 checks in a row.

For example using Robo 3T client, the checkbox "Use SSL Protocol" must be enabled, and **Authentication Method: Self-Signed Certificate **

Test produces Diagnostic output:

v Connected to mongodb-m0-nnxxx.mongodb.net:27017 via SSL tunnel
v Authorized on admin database as admin

Hope this helps somebody.

Upvotes: 0

prestondoris
prestondoris

Reputation: 329

I have had this issue connecting to a MongoDB Atlas cluster. I have had to resolve this issue twice because I was working on a project from two different computers (a Macbook Pro and a Windows PC).

Here is my comprehensive answer for everything that I have figured out to resolve the issue of my application not connecting to the cluster.

First Make sure your IP is whitelisted like the above suggestions. The easiest solution is the "All IPs" whitelist of 0.0.0.0/0

Second Check your VPN if you are using one. I was trying to connect to the cluster while connected to a VPN. Once I turned off my VPN, I was able to connect.

Third Make sure your internet settings are not preventing you from connecting to the cluster. My home Xfinity wifi security settings were set too high and this was preventing the connection. I think the router was not allowing a connection to port 27017. One way to test if this issue is occurring is to tether your computer to your phone for internet instead of your wifi and try connecting. I was able to connect using my iPhone as a hotspot for internet. I reset my router to factory settings which fixed the issue.

Upvotes: 26

Pramod Kharade
Pramod Kharade

Reputation: 2085

Above answer is right but just i want to added one point:

From security perspective it is not good;

  1. I also had a similar issue, and I was able to solve it by adding my white-listing my IP address under Clusters -> security -> IP Whitelist. Instead of clicking my current ip address, just search what's my ip on google and paste that instead. I hope it works!

  2. I also had a similar issue, and I was able to solve it by adding my white-listing my IP address under Clusters -> security -> IP Whitelist. added this IP in list: 0.0.0.0/0 it will open to all.

Upvotes: 4

Yassine Ab
Yassine Ab

Reputation: 95

google => my ip adress => copyit

got to Atlas => Once you re in the Clusters Tab, check at the left side=> Security => NetWork Access => Edit Ip => paste the ip adress.

rerun your server and it should be working :)

Upvotes: 0

Raunak Singha
Raunak Singha

Reputation: 91

Apparently, changing

mongoose.connect(keys.mongoURI);

to

mongoose.connect(keys.mongoURI, () => { }, { useNewUrlParser: true })
    .catch(err => {
        console.log(err);
    });

worked for me.

Upvotes: 1

Waweru Kamau
Waweru Kamau

Reputation: 1489

I also had a similar issue, and I was able to solve it by adding my white-listing my IP address under Clusters -> security -> IP Whitelist. Instead of clicking my current ip address, just search what's my ip on google and paste that instead. I hope it works!

Upvotes: 85

vrommer
vrommer

Reputation: 19

I had a similar issue and wasn't able to connect to mongo. Apparently mongodb didn't like my password which contained special characters. I tried doing URL encoding and all other kinds of manipulations, but what proved to solved the issue for me eventually was simply changing the password to one that doesn't use special characters. I used the mongodb password generator and all works fine now.

Upvotes: -1

Sohan
Sohan

Reputation: 588

It's an issue of your "IP Whitelist". Edit and update it once, it should work fine then.

Upvotes: 4

Related Questions