在heroku上无法通过node.js连接到mongolab

我在使用mongolab在heroku上制作node.js和mongodb时遇到了麻烦。 我已经阅读了其他问题,比如如何在MongoLab上设置Heroku上的MongoDB数据库? 以及如何在Node.js Web应用程序中pipe理MongoDB连接? 但我仍然无法build立我的联系。 在日志中显示[Error:failed to connect to …]

我有从数据库,主机和端口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'); }); 

我究竟做错了什么 ?

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

以下是使用URI和MongoClient进行连接的方法:

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

当然你需要用uriuserpasshostportdbreplace你的实际连接参数。 如果你使用的是Heroku的MongoLab插件,你可以像这样从环境获得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! */ }); 

这是我如何做到的。 这样,我的应用程序连接到我的开发机器上的“testing”数据库和在Heroku上部署和运行的“mongolab”数据库。

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

在我自己的情况下,我查询了configuration设置heroku config ,结果mongodb被添加为MONGODB_URI

所以,我添加了process.env.MONGODB_URI到uri,如:

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