Node.js Express App on Heroku Won't Connect to MongoLab Database using Mongoose

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

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 Logs:

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

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

Just do

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

to use the test db, change your uri:

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

I haven't worked with Mongoose but when I had connection problems with MongoLab in the past it was due to a race condition caused by connecting to the db and client code which assumes the connect. Typically the solution is to bind to the open event or provide a callback which is invoked by the underlying driver before resuming the start up that requires a connection. This is what I do with Mongoskin and I never have an issue.

hth mike