can't connect to mongolab with node.js on heroku
Solution 1
The core issue seems to be that you're trying to use a MongoDB URI as a hostname.
Here's how to connect using a URI and MongoClient
:
var mongodb = require('mongodb');
var uri = 'mongodb://user:pass@host:port/db';
mongodb.MongoClient.connect(uri, function (err, db) {
/* adventure! */
});
Of course you'll want to substitute the user
, pass
, host
, port
, and db
in the uri
for your actual connect parameters. If you're using the MongoLab add-on for Heroku you can get the URI from the environment like this:
var uri = process.env.MONGOLAB_URI;
When using MongoClient
safe mode is the default, so that option can be left out. To specify auto_reconnect
simply pass it as a server option.
var mongodb = require('mongodb');
var uri = 'mongodb://user:pass@host:port/db';
mongodb.MongoClient.connect(uri, { server: { auto_reconnect: true } }, function (err, db) {
/* adventure! */
});
Solution 2
Here's is how I do it. This way, my application connects to the "test" database on my development machine and the "mongolab" database when deployed and running on Heroku.
mongoose = require("mongoose");
mongoURI = 'mongodb://localhost/test';
mongoose.connect(process.env.MONGOLAB_URI || mongoURI);
Solution 3
In my own case, I queried the configuration settings heroku config
and it turns out that the mongodb is added as MONGODB_URI
.
So, I added process.env.MONGODB_URI to the uri such as:
var uri = process.env.MONGODB_URI || process.env.MONGOHQ_URL || process.env.MONGOLAB_URI;
user2528290
Updated on June 21, 2022Comments
-
user2528290 about 2 years
I am having trouble making node.js and mongodb with mongolab work on heroku. I have read other issues like How do I setup MongoDB database on Heroku with MongoLab? and How do I manage MongoDB connections in a Node.js web application? but I still can not set up my connection. In the logs it says [Error: failed to connect to ...]
I have takend the db, host and port from the MONGOLAB_URI process env.I have the following code:
var mongoUri = mongodb://heroku_app17328644:{password}@ds037518.mongolab.com //taken from process.env.MONGOLAB_URI var host = 'mongodb://heroku_appXXXXXX:{password}@ds037518.mongolab.com'; var port = '37518'; var database = 'heroku_appXXXXXX'; Provider.db = new Db(database, new Server(host, port, { safe: true }, { auto_reconnect: true }, {})); Provider.db.open(function(err, db){ console.log(db); //null if (err) console.log(err); else console.log('success'); });
What am I doing wrong ?
-
Ari about 6 yearsHi, I kind of have the same issue. When I do 'heroku config' it doesn't return the MONGODB_URI, it only returns the heroku link. I tried with this too 'heroku config:get MONGODB_URI' but it doesn't return anything. My code link is : github.com/Aritra1704/TutorialRestAPI/blob/master/server/db/… heroku push is working but the logs show failed to connect to port 27017. What might I be doing wrong? node version 8.9.4