2013-08-06 13 views
5

Mam problemy z tworzeniem pliku node.js i mongodb z mongolabem na heroku. Czytałem inne problemy, takie jak How do I setup MongoDB database on Heroku with MongoLab? i How do I manage MongoDB connections in a Node.js web application?, ale nadal nie mogę skonfigurować mojego połączenia. W dziennikach mówi [Błąd: nie udało się połączyć ...]nie można połączyć się z mongolabem za pomocą node.js na heroku

Mam takend db, host i port z procesu MONGOLAB_URI env.I mieć następujący kod:

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

co ja Robię źle?

+0

Co się komunikat o błędzie, że masz? – Derick

+0

Otrzymuje komunikat "Błąd: nie można połączyć się z ...", a "db" ma wartość null :) – randunel

+0

To nie jest pełny komunikat o błędzie ... – Derick

Odpowiedz

13

Głównym problemem wydaje się być to, że próbujesz użyć identyfikatora URI MongoDB jako nazwy hosta.

Oto jak połączyć za pomocą URI i MongoClient:

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

Oczywiście będziemy chcieli zastąpić user, pass, host, port i db w uri dla rzeczywistych parametrów połączyć. Jeśli używasz MongoLab add-on for Heroku można uzyskać URI z otoczenia tak:

var uri = process.env.MONGOLAB_URI; 

Podczas korzystania MongoClient tryb awaryjny jest domyślna, więc ta opcja może być pominięta. Aby określić auto_reconnect po prostu przekazać go jako opcję serwera.

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

Oto, jak to robię. W ten sposób moja aplikacja łączy się z bazą "testową" na mojej maszynie programistycznej i bazą danych "mongolab" po wdrożeniu i uruchomieniu na Heroku.

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

W moim przypadku, ja zapytaliśmy ustawienia konfiguracyjne heroku config i okazuje się, że MongoDB jest dodawany jako MONGODB_URI.

Więc dodałem process.env.MONGODB_URI do URI, takich jak:

var uri = process.env.MONGODB_URI || process.env.MONGOHQ_URL || process.env.MONGOLAB_URI; 
Powiązane problemy