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.1localhost

例如,在下面的 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_URIMONGOLAB_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的主要内容,如果未能解决你的问题,请参考以下文章

使用 mocha 时 getaddrinfo 无法解析主机文件中的地址

MongoError:无法在本地运行项目

MongoError $regex 必须是一个字符串

MongoError:套接字挂起

MongoError:套接字挂起

MongoError:命令聚合需要身份验证