2016-08-23 264 views
0

所以我正在努力,虽然从Manning获得意思书,并遵循第5章中的步骤我试图在Mongolab上使用数据库作为Heroku的附加组件。当我运行这段代码(本地和在Heroku)返回此错误:MongoError:getaddrinfo ENOTFOUND undefined undefined:27017

MongoError: getaddrinfo ENOTFOUND undefined undefined:27017

这是我当前的代码:

var mongoose = require('mongoose'); 

var dbURI = "mongodb://localhost/loc8r"; 
if (process.env.NODE_ENV === 'production') { 
    dbURI = process.env.MONGOLAB_URI; 
} 
mongoose.connect(dbURI); 

疑难解答我从终端与启动应用程序

NODE_ENV=production MONGOLAB_URI=/*my mongo uri here*/ 

与它在本地运行良好。所以我不确定问题来自哪里。有关排除列出的错误的任何建议?

回答

1

所以我不确定这个过程的哪一部分解决了这个问题,但我完全删除/删除了Heroku中的mongolab插件。然后,我重新添加了它,并使用相同的代码执行了相同的确切步骤,并且工作正常!

感谢所有帮助过我的人!

0

这看起来正确。之前我也看到过这个错误(很多)。 'undefined undefined'我相信你的环境变量是未定义的。尝试控制台记录你的环境变量,以确保它们是有效的。

+0

所以我控制台登录我的环境,并将其推到heroku,它输出'生产'这似乎很好。所以我猜这个错误是由于某种原因使用'process.env.MONGOLAB_URI'所致。 – txnnxr

+0

看看下面的对话,对于MONGOLAB_URI作为传统来说,Pneumee是完全正确的。我忘记了这一点,MONGODB_URI就是你想要用作你的Heroku env变量的东西。 但是,对于本地测试,这应该不重要,因为您只是为自己创建和提供变量。 您是否在使用Nodemon来启动您的应用程序?你用来启动的确切命令是什么? 对于调试,也尝试添加 console.log('DB URI:'+ process.env。MONGOLAB_URI); 在这个文件的某个地方,所以你可以很容易地监视它。 – Adam

3

我认为你没有提供mongoDB所需的PORT NO.

请与本地主机一起给port no.(27017)

试试这个:

var dbURI = "mongodb://127.0.0.1:27017/loc8r"; 

getaddrinfo ENOTFOUND意味着客户端无法连接到指定的地址。请尝试使用上述地址。

我希望这可以帮助。

+0

它在本地运行良好。问题是当它尝试使用'MONGOLAB_URI'时 – txnnxr

1

为mLab加载项创建的Heroku环境变量被称为MONGODB_URIMONGOLAB_URI可能是遗留问题)。

+0

我试图改为'MONGODB_URI',但它仍然输出相同的错误 – txnnxr

+0

什么是'当鼬试图连接时设置'dbURI'? (显然屏蔽或更改连接字符串中的任何敏感信息 - 格式是我感兴趣看到的)。 – pneumee

+0

嗯,我没有想过要检查......它以“undefined”的形式出现。这肯定是问题所在,但是看看其他人的设置我不知道为什么'process.env.MONGOLAB_URI'没有返回上述代码中的任何东西 – txnnxr

0

为mLab加载项创建的Heroku环境变量称为MONGODB_URI(MONGOLAB_URI可能是遗留问题)。(pneumee)

这解决了我的问题。