7

我无法使用 mongolab 在 heroku 上制作 node.js 和 mongodb。我已经阅读了其他问题,例如如何使用 MongoLab 在 Heroku 上设置 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');
});

我究竟做错了什么 ?

4

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

当然,您需要将user, pass, host, port, 和db替换uri为您的实际连接参数。如果您使用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! */
});
于 2013-08-06T19:25:52.753 回答
4

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

mongoose = require("mongoose");
mongoURI = 'mongodb://localhost/test';
mongoose.connect(process.env.MONGOLAB_URI || mongoURI);
于 2014-11-11T01:20:13.050 回答
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;
于 2016-08-16T21:03:36.477 回答