无法使用heroku上的node.js连接到mongolab

时间:2013-08-06 09:24:51

标签: node.js mongodb heroku mlab

我无法使用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?,但我仍无法建立连接。它在日志中显示[错误:无法连接到...]

我已从MONGOLAB_URI进程env获取数据库,主机和端口。我有以下代码:

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

我做错了什么?

3 个答案:

答案 0 :(得分:14)

核心问题似乎是您尝试使用MongoDB URI作为主机名。

以下是使用URI和MongoClient

进行连接的方法
var mongodb = require('mongodb');
var uri = 'mongodb://user:pass@host:port/db';
mongodb.MongoClient.connect(uri, function (err, db) {
    /* adventure! */
});

当然,您需要替换user中的passhostportdburi你的实际连接参数。如果您使用MongoLab add-on for Heroku,则可以从环境中获取URI:

var uri = process.env.MONGOLAB_URI;

使用MongoClient安全模式时是默认设置,因此可以省略该选项。要指定auto_reconnect,只需将其作为服务器选项传递。

var mongodb = require('mongodb');
var uri = 'mongodb://user:pass@host:port/db';
mongodb.MongoClient.connect(uri, { server: { auto_reconnect: true } }, function (err, db) {
    /* adventure! */
});

答案 1 :(得分:4)

这就是我的表现方式。这样,我的应用程序连接到" test"我的开发机器上的数据库和" mongolab"在Heroku上部署和运行时的数据库。

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

答案 2 :(得分: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;