在Heroku上使用Node.js无法连接到MongoLab

7
我遇到了在heroku上使用node.js和mongodb与mongolab配合的问题。我已经阅读了其他问题,例如如何在Heroku上使用MongoLab设置MongoDB数据库?如何在Node.js Web应用程序中管理MongoDB连接?,但我仍然无法建立连接。在日志中显示[错误:无法连接到...]。
我已经从MONGOLAB_URI进程环境中获取了数据库、主机和端口。我有以下代码:
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');
});

我做错了什么?

你收到了什么错误信息? - Derick
他得到了“错误:无法连接到...”并且“db”为空 :) - randunel
这不是完整的错误信息... - Derick
[错误:无法连接到mongodb://heroku_appXXXXXX:{password}@ds037518.mongolab.com] 这是我收到的错误信息。 - user2528290
3个回答

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! */
});

当然,您需要将uri中的userpasshostportdb替换为您实际的连接参数。如果您正在使用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! */
});

嗨,我有同样的问题。当我执行 'heroku config' 时,它不会返回 MONGODB_URI,只会返回 heroku 链接。我也尝试了 'heroku config:get MONGODB_URI',但没有返回任何内容。我的代码链接是:https://github.com/Aritra1704/TutorialRestAPI/blob/master/server/db/mongoose.jsHeroku 推送正在工作,但日志显示无法连接到端口 27017。我可能做错了什么?节点版本为 8.9.4。 - Ari

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;

4

以下是我的做法。这样,我的应用在连接到本地“test”数据库时,会连接到开发机器上的“test”数据库,在Heroku上部署后运行时,会连接到“mongolab”数据库。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接