【问题标题】:MongoError: getaddrinfo ENOTFOUND undefined undefined:27017MongoError: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*/

它在本地运行良好。所以我不确定问题出在哪里。对所列错误的故障排除有何建议?

【问题讨论】:

    标签: mongodb heroku mongoose mlab


    【解决方案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)

        这解决了我的问题。

        【讨论】:

          猜你喜欢
          • 2016-07-03
          • 1970-01-01
          • 2021-08-19
          • 2012-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-09
          • 2018-01-05
          相关资源
          最近更新 更多