2013-08-06 42 views
5

我在使用mongolab在heroku上工作時遇到了node.js和mongodb問題。我已閱讀其他問題,如How do I setup MongoDB database on Heroku with MongoLab?How do I manage MongoDB connections in a Node.js web application?,但仍無法建立連接。在日誌中,它說[錯誤:無法連接到...]無法通過heroku上的node.js連接到mongolab

我已經takend從MONGOLAB_URI過程env.I有以下代碼數據庫,主機和端口:

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

上午什麼我做錯了?

+0

那是什麼,你得到的錯誤信息? – Derick

+0

他得到'錯誤:無法連接到...'和'db'爲空:) – randunel

+0

這不是完整的錯誤信息... – Derick

回答

13

核心問題似乎是你試圖使用MongoDB URI作爲主機名。

下面介紹如何使用URI和MongoClient連接:

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

當然你要替換userpasshostport,並在uridb爲您的實際連接參數。如果您使用的MongoLab add-on for Heroku你可以從這樣的環境中得到URI:

var uri = process.env.MONGOLAB_URI; 

使用MongoClient安全模式是默認的,因此該選項可以去掉。要指定auto_reconnect,只需將其作爲服務器選項傳遞即可。

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

下面是我如何做到這一點。這樣,我的應用程序連接到我的開發機器上的「測試」數據庫和在Heroku上部署和運行時的「mongolab」數據庫。

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

就我自己來說,我查詢配置設置heroku config和事實證明,MongoDB的添加爲MONGODB_URI

所以,我說process.env.MONGODB_URI到URI如:

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