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

Posted

技术标签:

【中文标题】无法在 heroku 上使用 node.js 连接到 mongolab【英文标题】:can't connect to mongolab with node.js on heroku 【发布时间】:2013-08-07 05:35:16 【问题描述】:

我无法使用 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 进程环境中获取了数据库、主机和端口。我有以下代码:

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

我做错了什么?

【问题讨论】:

您收到的错误信息是什么? 他得到Error: failed to connect to ...db 为空:) 这不是完整的错误信息... [Error: failed to connect to mongodb://heroku_appXXXXXX:password@ds037518.mongolab.com] 这是我得到的错误 【参考方案1】:

核心问题似乎是您试图使用 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 替换为您的实际连接参数。如果您使用的是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! */
);

【讨论】:

嗨,我也有同样的问题。当我执行“heroku config”时,它不会返回 MONGODB_URI,它只会返回 heroku 链接。我也试过这个'heroku config:get MONGODB_URI',但它没有返回任何东西。我的代码链接是:github.com/Aritra1704/TutorialRestAPI/blob/master/server/db/… heroku push 正在工作,但日志显示无法连接到端口 27017。我可能做错了什么?节点版本 8.9.4【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

所以,我在 uri 中添加了 process.env.MONGODB_URI,例如:

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

【讨论】:

以上是关于无法在 heroku 上使用 node.js 连接到 mongolab的主要内容,如果未能解决你的问题,请参考以下文章

无法在 heroku 上推送 node.js 应用程序

Node.js 应用程序无法在 heroku 上启动

在 Heroku 上为 Mongo Labs 数据库配置 Node.js 连接字符串

将简单的 Node.js 和 Socket.io 聊天应用程序与 Rails 应用程序连接起来(在 Heroku 上)

Heroku上的Node.js Web Socket H15空闲连接超时

Node.js + Mongoose 可以在本地工作,但不能在 Heroku 上工作