2013-08-06 14 views
5

Ho problemi a creare node.js e mongodb con il lavoro di mongolab su heroku. Ho letto altri problemi come How do I setup MongoDB database on Heroku with MongoLab? e How do I manage MongoDB connections in a Node.js web application? ma non riesco ancora a configurare la mia connessione. Nei registri si dice [Errore: non è riuscito a connettersi a ...]non è in grado di connettersi a mongolab con node.js su heroku

ho takend il db, host e la porta dal processo MONGOLAB_URI env.I ha il seguente codice:

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

Cosa am Sto sbagliando?

+0

Qual è il messaggio di errore che si ottiene? – Derick

+0

Si alza 'Errore: non è riuscito a connettersi a ...' e 'db' è nullo :) – randunel

+0

Non è questo il messaggio di errore completo ... – Derick

risposta

13

La questione centrale sembra essere che si sta cercando di utilizzare un MongoDB URI come hostname.

Ecco come collegare tramite un URI e MongoClient:

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

Naturalmente si vorrà sostituire il user, pass, host, port, e db nel uri per i parametri effettivi di connessione. Se si sta utilizzando il MongoLab add-on for Heroku è possibile ottenere l'URI dall'ambiente in questo modo:

var uri = process.env.MONGOLAB_URI; 

Quando si utilizza MongoClient safe-mode è il default, in modo che l'opzione può essere lasciato fuori. Per specificare auto_reconnect basta passarlo come opzione server.

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

Ecco come lo faccio. In questo modo, la mia domanda si collega al database "test" sulla mia macchina di sviluppo e il database "mongolab" quando schierato e in esecuzione su Heroku.

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

Nel mio caso, ho chiesto le impostazioni di configurazione heroku config e si scopre che il MongoDB viene aggiunto come MONGODB_URI.

Così, ho aggiunto process.env.MONGODB_URI alle uri quali:

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