2013-08-06 6 views
5

Ich habe Probleme damit, node.js und mongodb mit mongolab an heroku zu arbeiten. Ich habe andere Probleme wie How do I setup MongoDB database on Heroku with MongoLab? und How do I manage MongoDB connections in a Node.js web application? gelesen, aber ich kann meine Verbindung immer noch nicht einrichten. In den Protokollen heißt es [Fehler: die Verbindung fehlgeschlagen ...]kann keine Verbindung zu mongolab mit node.js auf heroku herstellen

ich die db, Host und Port aus dem MONGOLAB_URI Prozess takend habe env.I den folgenden Code hat:

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'); 
}); 

Was ist Ich mache falsch?

+0

Was ist die Fehlermeldung, die Sie erhalten? – Derick

+0

Er bekommt 'Fehler: Verbindung fehlgeschlagen mit ...' und die 'db' ist null :) – randunel

+0

Das ist nicht die vollständige Fehlermeldung ... – Derick

Antwort

13

Das Kernproblem scheint zu sein, dass Sie versuchen, einen MongoDB-URI als Hostnamen zu verwenden.

Hier ist, wie eine URI zu verbinden und MongoClient:

var mongodb = require('mongodb'); 
var uri = 'mongodb://user:[email protected]:port/db'; 
mongodb.MongoClient.connect(uri, function (err, db) { 
    /* adventure! */ 
}); 

Natürlich werden Sie die user, pass, host, port und db im uri für Ihre tatsächliche Verbindungsparameter ersetzen wollen. Wenn Sie die MongoLab add-on for Heroku verwenden können Sie den URI aus der Umgebung wie diese:

var uri = process.env.MONGOLAB_URI; 

Bei der Verwendung von MongoClient abgesicherten Modus der Standard ist, so kann diese Option weggelassen werden. Um auto_reconnect anzugeben, übergeben Sie es einfach als Serveroption.

var mongodb = require('mongodb'); 
var uri = 'mongodb://user:[email protected]:port/db'; 
mongodb.MongoClient.connect(uri, { server: { auto_reconnect: true } }, function (err, db) { 
    /* adventure! */ 
}); 
4

Hier ist, wie ich es mache. Auf diese Weise verbindet sich meine Anwendung mit der "Test" -Datenbank auf meinem Entwicklungscomputer und der "Mongolab" -Datenbank, wenn sie auf Heroku bereitgestellt und ausgeführt wird.

mongoose = require("mongoose"); 
mongoURI = 'mongodb://localhost/test'; 
mongoose.connect(process.env.MONGOLAB_URI || mongoURI); 
4

In meinem Fall abgefragt ich die Konfigurationseinstellungen heroku config und es stellt sich heraus, dass die mongodb als MONGODB_URI hinzugefügt wird.

Also, habe ich process.env.MONGODB_URI den uri wie:

var uri = process.env.MONGODB_URI || process.env.MONGOHQ_URL || process.env.MONGOLAB_URI;