Reputation: 377
So I'm working my way though the Getting Mean book from Manning and following the steps in Chapter 5 I'm trying to use a db on Mongolab as an add-on to Heroku. When I run this code (both locally and on Heroku) it returns this error:
MongoError: getaddrinfo ENOTFOUND undefined undefined:27017
This is my current code:
var mongoose = require('mongoose');
var dbURI = "mongodb://localhost/loc8r";
if (process.env.NODE_ENV === 'production') {
dbURI = process.env.MONGOLAB_URI;
}
mongoose.connect(dbURI);
Troubleshooting I started the app from the terminal with:
NODE_ENV=production MONGOLAB_URI=/*my mongo uri here*/
with that it runs fine locally. So I'm not sure where the issue is coming from. Any suggestions for troubleshooting the error listed?
Upvotes: 25
Views: 106021
Reputation: 2905
If you're getting this while running some replica sets in Docker Compose and trying to connect MongoDB Compass just make sure that you have the 'Direct connection' checked.
Upvotes: 36
Reputation: 1771
I had the same error, however, in my case I used different docker containers. Basically, the error is telling you that your application can not connect to the monogodb
server. This can arise for instance by false port number, false IP address, etc. In my case the docker I had mongodb
on was not in a same network as my server and so, the server couldn't fetch data from database.
To solve/debug it I done the followings:
docker network ls
docker network inspect [Network Name]
mongodb
-network:docker network disconnect [Network Name] [Container Name]
docker network connect [Network Name] [Container Name]
Upvotes: 0
Reputation: 2165
I have the same problem, other solutions not work for me but i did that with this way
for mongo URI you must use your mongodb
service name
instead127.0.0.1
orlocalhost
for example in below docker-compose file my mongo service name is mongodb-myapp
and i change uri like this mongodb://mongodb-myapp:27017/myapp
and it works for me
services:
boilerplate-api-app:
build: .
environment:
- MONGO_URI=mongodb://mongodb-myapp:27017/myapp
volumes:
- .:/app
ports:
- "5000:5000"
depends_on:
- mongodb-myapp
mongodb-myapp:
image: mongo
ports:
- "27017:27017"
Upvotes: 7
Reputation: 81
You just missed specifying the port number as shown:
var dbURI = "mongodb://localhost:27017/thenDBname"
Make sure to change localhost while hosting on production server.
Upvotes: 6
Reputation: 9268
I think you are not providing the PORT NO.
required for mongoDB
.
Please give the port no.(27017)
along with localhost.
Try this:
var dbURI = "mongodb://127.0.0.1:27017/loc8r";
getaddrinfo ENOTFOUND
means client was not able to connect to the given address. Please try with the above address.
I hope this helps.
Upvotes: 28
Reputation: 377
So I'm not sure what part of this process fixed the issue but I completely removed/deleted the mongolab addon from Heroku. Then I added it back on and performed the same exact steps with the same code and it worked!
Thanks for everyone who was helping out!
Upvotes: 2
Reputation: 494
The Heroku environment variable that gets created for an mLab add-on is called MONGODB_URI
(MONGOLAB_URI
may be a legacy thing).
Upvotes: 2
Reputation: 897
This looks correct. I've seen this error (a lot) before as well. The 'undefined undefined' I believe is referring to your environment variables being undefined. Try console logging your environment variables to make sure they're valid.
Upvotes: 0