MongoError:getaddrinfo ENOTFOUND undefined undefined:27017
Posted
技术标签:
【中文标题】MongoError:getaddrinfo ENOTFOUND undefined undefined:27017【英文标题】:MongoError: getaddrinfo ENOTFOUND undefined undefined:27017 【发布时间】:2016-12-30 17:51:07 【问题描述】:所以我正在阅读 Manning 的 Getting Mean 书,并按照第 5 章中的步骤进行操作,我正在尝试使用 Mongolab 上的数据库作为 Heroku 的附加组件。当我运行这段代码(在本地和 Heroku 上)它返回这个错误:
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】:我认为您没有提供mongoDB
所需的PORT NO.
。
请将port no.(27017)
连同本地主机一起提供。
试试这个:
var dbURI = "mongodb://127.0.0.1:27017/loc8r";
getaddrinfo ENOTFOUND
表示客户端无法连接到给定地址。请用上面的地址试试。
我希望这会有所帮助。
【讨论】:
它在本地运行良好。问题是当它尝试使用MONGOLAB_URI
【参考方案2】:
您只是错过了指定端口号,如图所示:
var dbURI = "mongodb://localhost:27017/thenDBname"
确保在生产服务器上托管时更改 localhost。
【讨论】:
请检查您的答案。两条建议的行是相同的。【参考方案3】:如果你用 docker 解决这个问题,我用这个解决方案解决
我有同样的问题,其他解决方案不适合我,但我用这种方式做到了
对于 mongo URI,您必须使用 mongodb
service name
而不是127.0.0.1
或localhost
例如,在下面的 docker-compose 文件中,我的 mongo 服务名称是 mongodb-myapp
,我像这样更改 uri mongodb://mongodb-myapp:27017/myapp
它对我有用
services:
boilerplate-api-app:
build: .
environment:
- MONGO_URI=mongodb://mongodb-myapp:27017/myapp
volumes:
- .:/app
ports:
- "5000:5000"
depends_on:
- mongodb-myapp
mongodb-myapp:
image: mongo
ports:
- "27017:27017"
【讨论】:
【参考方案4】:为 mLab 加载项创建的 Heroku 环境变量称为 MONGODB_URI
(MONGOLAB_URI
可能是旧事物)。
【讨论】:
我尝试更改为MONGODB_URI
,但仍然输出相同的错误
当猫鼬尝试连接时,dbURI
设置为什么? (显然屏蔽或更改连接字符串中的任何敏感信息 - 格式是我有兴趣看到的)。
嗯,我没想过要检查...它以undefined
的形式出现。这肯定是问题所在,但是看看其他人的设置,我不知道为什么process.env.MONGOLAB_URI
在上面的代码中没有返回任何内容
您是否可以通过 Heroku CLI 工具查看该值:devcenter.heroku.com/articles/… ?
是的,用那个命令我得到的东西看起来像:mongodb://username:pasword@ds010000.mlab.com:10000/heroku_adcljdgt【参考方案5】:
所以我不确定这个过程的哪一部分解决了这个问题,但我完全从 Heroku 中删除/删除了 mongolab 插件。然后我重新添加它并使用相同的代码执行相同的步骤,它工作了!
感谢所有提供帮助的人!
【讨论】:
【参考方案6】:这看起来是正确的。我以前也看到过这个错误(很多)。我认为“未定义的未定义”是指您的环境变量未定义。尝试控制台记录您的环境变量以确保它们有效。
【讨论】:
所以我在控制台记录了我的环境并将其推送到 heroku 并输出看起来不错的“生产”。所以我猜这个错误与使用process.env.MONGOLAB_URI
出于某种原因有关
看看下面的对话,pneumee 完全正确地认为 MONGOLAB_URI 是遗留的。我忘记了, MONGODB_URI 是您想要用作 Heroku 环境变量的内容。但是,对于本地测试,这无关紧要,因为您只是为自己创建和提供变量。您是否使用 Nodemon 来启动您的应用程序?您用于启动的确切命令是什么?对于调试,还可以尝试添加 console.log('DB URI: ' + process.env.MONGOLAB_URI);此文件中的某个位置,以便您可以轻松地窥探它。【参考方案7】:
为 mLab 加载项创建的 Heroku 环境变量称为 MONGODB_URI(MONGOLAB_URI 可能是遗留的东西)。(pneumee)
这解决了我的问题。
【讨论】:
以上是关于MongoError:getaddrinfo ENOTFOUND undefined undefined:27017的主要内容,如果未能解决你的问题,请参考以下文章