Node.js Express App on Heroku will not connect to MongoLab database using Mongoose

I am trying to get my node.js express application to connect to the MongoLab database on Heroku using Mongoose. I used app.configure to set my database URI to my MongoLab URI on production , and as you can see in Heroku dbURI , it definitely sets dbURI for MongoLab URI. I definitely set NODE_ENV to production . What is my problem?

app.js

 var express = require('express'); var mongoose = require('mongoose') , dbURI = 'localhost'; var app = express(); app.configure('production', function () { console.log("production!"); dbURI = 'mongodb://brad.ross.35: Brad1234@ds031347.mongolab.com :31347/heroku_app6861425'; console.log(dbURI); }); mongoose.connect(dbURI, 'test'); mongoose.connection.on('error', console.error.bind(console, 'connection error:')); var postSchema = new mongoose.Schema({ body: String }); var Post = mongoose.model('Post', postSchema); app.configure(function () { //app.use(express.logger()); app.use(express.bodyParser()); app.use(express.static(__dirname + '/static')); }); app.set('views', __dirname + '/views'); app.set('view engine','jade'); app.get('/', function(request, response) { response.render('index'); }); app.post('/result', function(request, response) { var post = new Post({body: request.body.text}); post.save(function (err) { if (err) { console.log("error!"); } else { console.log("saved!"); } }); Post.find(function (err, posts) { if (!err) { console.log("found!"); console.log(posts); response.render('result', {posts: posts}); } else { console.log("error!"); response.render('result', {posts: []}); } }); }); app.get('/result', function (request, response) { Post.find(function (err, posts) { if (!err) { console.log("found!"); console.log(posts); response.render('result', {posts: posts}); } else { console.log("error!"); response.render('result', {posts: []}); } }); }); app.listen(process.env.PORT || 5000); 

Heroku Magazines :

 2012-08-21T16:52:21+00:00 heroku[web.1]: State changed from crashed to starting 2012-08-21T16:52:22+00:00 heroku[slugc]: Slug compilation finished 2012-08-21T16:52:23+00:00 heroku[web.1]: Starting process with command `node app.js` 2012-08-21T16:52:24+00:00 app[web.1]: production! 2012-08-21T16:52:24+00:00 app[web.1]: mongodb://brad.ross.35: PASSWORD@ds031347.mongolab.com :31347/heroku_app6861425 2012-08-21T16:52:24+00:00 app[web.1]: connection error: [Error: failed to connect to [ds031347.mongolab.com:31347/heroku_app6861425:27017]] 2012-08-21T16:52:25+00:00 heroku[web.1]: State changed from starting to up 
+4
source share
2 answers

When passing a URI, there is no need to pass the database name separately (which confuses the mongoose).

Just do

 var uri = 'mongodb://brad.ross.35: Brad1234@ds031347.mongolab.com :31347/heroku_app6861425' mongoose.connect(uri) 

to use db test change your uri:

 var uri = 'mongodb://brad.ross.35: Brad1234@ds031347.mongolab.com :31347/test' 
+3
source

I did not work with Mongoose, but when I had problems connecting to MongoLab in the past, it was due to the race condition caused by connecting to db and the client code that involves the connection. Typically, the solution is to bind to an open event or call a callback that is called by the underlying driver before resuming a startup that requires a connection. This is what I do with Mongoskin and I have never had a problem.

NTN microphone

0
source

All Articles