Node.js & Mongodb - Dont receive any data from the database droplet

April 27, 2019 375 views
Node.js MongoDB Ubuntu 16.04

Hi, i hope one of you can help me out with this question. I recently created 2 droplets. One of them are containing my node express application and the other is containing my MongoDB database version 3.4.2. My problem is that i can see my node application is connecting to my database, but it is not receiving any data back. When i try to load a page with data from the database, it just gives me an error. I use mongoose to connect to my database droplet.

Node.js: I have set this up with mongoose to connect to my database droplet and i have allowed my database droplets ip in the UFW to "Allow In" anywhere. For my node express i am using Nginx as well.

MongoDB: My mongo droplet is setup with version 3.4.2, and when i run netstat -anp i can see the following:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0*               LISTEN      -               
tcp        0      0*               LISTEN      -               
tcp        0      0    *               LISTEN      -               
tcp        0      0 database_droplet_ip:27017     node_droplet_ip:53274    ESTABLISHED -               
tcp        0      0 database_droplet_ip:22        node_droplet_ip:43929    ESTABLISHED -               
tcp6       0      0 :::22                   :::*                    LISTEN      -     

So for me it looks like my node application is connecting to the database droplet, but as soon as i try to get any data from the database, i just receive an error.
My mongoose string is the following: mongoose.connect("mongodb://username:password@database_ip:27017/database_name?authSource=admin", {useNewUrlParser: true });

In the database i haven't made any database, cause that is being created by itself, right? So if i write cucumber in the mongoose string, then it creates the database if it doesn't exist. But in the database i only have admin and local. If i connect the node application to for example mongodb atlas, it connects without any problems.

The UFW on my node application looks like the following:

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
27017                      ALLOW       node_ip            
Nginx Full                 ALLOW       Anywhere                  
Anywhere                   ALLOW       mongodb_ip             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx Full (v6)            ALLOW       Anywhere (v6)  

and the UFW on my mongo droplet look like:

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
27017                      ALLOW       node_ip            
OpenSSH (v6)               ALLOW       Anywhere (v6) 

The MongoDB conf looks like the following:

# mongod.conf

# for documentation of all options, see:

# Where and how to store data.
  dbPath: /var/lib/mongodb
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
  port: 27017


  authorization: "enabled"




## Enterprise-Only Options:



(I have checked that mongo is actually running)

I hope that one of you will be able to help me with this, since i have spend days trying to figure this out. As a last information, it is IPv4 addresses i am using and not IPv6. At my domain provider i have setup A and AAAA for both IPv4 and IPv6 to the domain. I can easily access the application by typing the domain, but not get the data from the database. To install the database droplet i have followed the initial server setup and install and secure mongodb article from digitalocean.

1 Answer
lefevreteam May 2, 2019
Accepted Answer

I solved this myself. It was actually a silly error. Apparently i assigned the wrong role to the database user. After i gave it role "root" instead, everything worked perfectly.

Have another answer? Share your knowledge.