MongoError: getaddrinfo ENOTFOUND undefined undefined:27017 (蒙哥错误:获取地址信息时未找到未定义的未定义值:27017)

23

我正在阅读 Manning 出版社的《Getting Mean》一书,并按照第五章的步骤尝试在 Heroku 上使用 Mongolab 数据库添加。当我运行此代码(本地和 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);

故障排除 我从终端启动了应用程序:

Troubleshooting I started the app from the terminal with:

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

在本地测试时一切正常,所以我不确定问题出在哪里。有没有关于解决这个错误的建议?

9个回答

28
我认为你没有提供所需的端口号PORT NO.。 请在本地主机名后跟上端口号(27017)port no.(27017)试一试:
var dbURI = "mongodb://127.0.0.1:27017/loc8r";

getaddrinfo ENOTFOUND表示客户端无法连接到给定地址。请尝试使用上述地址。

我希望这可以帮到你。


它在本地运行良好。问题出在它尝试使用MONGOLAB_URI时。 - blipblop

7

如果您在使用Docker时遇到此问题,我使用以下解决方案解决了该问题

我曾遇到相同的问题,其他解决方案对我无效,但我用以下方法解决了它

对于Mongo URI,您必须使用您的mongodb 服务名称而不是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"

6

您刚才没有指定端口号,如下所示:

  var dbURI = "mongodb://localhost:27017/thenDBname"

在将网站部署到生产服务器上时,一定要确保将 localhost 改为正确的服务器地址。


2
请检查您的答案。两个建议的行是相同的。 - Joey

6

如果您在运行一些Docker Compose中的副本集并尝试连接MongoDB Compass时遇到此问题,请确保已选中“直接连接”。

enter image description here


2

Heroku环境变量中为mLab插件创建的变量名为MONGODB_URIMONGOLAB_URI可能是遗留问题)。


我尝试将MONGODB_URI更改,但仍然输出相同的错误。 - blipblop
当mongoose尝试连接时,dbURI设置为什么?(显然要掩盖或更改连接字符串中的任何敏感信息 - 我感兴趣的是格式)。 - pneumee
嗯,我没想到要检查那个...它以 undefined 的形式出现。这肯定是问题所在,但看了其他人的设置,我不知道为什么以上代码中 process.env.MONGOLAB_URI 没有返回任何内容。 - blipblop
您能否通过Heroku CLI工具查看值:https://devcenter.heroku.com/articles/mongolab#getting-your-connection-uri? - pneumee
是的,使用该命令我可以得到类似以下的内容:mongodb://username:pasword@ds010000.mlab.com:10000/heroku_adcljdgt - blipblop
很好。你确定代码使用的是 process.env.MONGODB_URI 而不是 process.env.MONGOLAB_URI(后者将为未定义)? - pneumee

2

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

感谢所有帮助我的人!


1

Heroku环境变量创建的mLab插件称为MONGODB_URI(MONGOLAB_URI可能是一种遗留物)。(pneumee)

这对我解决了问题。


0

这看起来是正确的。我之前也经常遇到过这种错误。我相信“undefined undefined”是指您的环境变量未定义。尝试使用控制台记录环境变量,以确保它们是有效的。


所以我将我的环境记录在控制台并推送到Heroku,输出结果为“production”,这看起来很好。所以我猜测错误可能与某种原因使用process.env.MONGOLAB_URI有关。 - blipblop
看下面的对话,pneumee关于MONGOLAB_URI是遗留问题是完全正确的。我忘记了这一点,你需要使用MONGODB_URI作为你的Heroku环境变量。然而,对于本地测试来说,这并不重要,因为你只是为自己创建和提供一个变量。你正在使用Nodemon启动你的应用程序吗?你使用的确切命令是什么?为了调试,还可以尝试在此文件中添加 console.log('DB URI: ' + process.env.MONGOLAB_URI); 这样你就可以轻松地窥视它了。 - Adam

0

我也遇到了同样的错误,但是我的情况下使用了不同的docker容器。基本上,这个错误告诉你应用程序无法连接到monogodb服务器。这可能是由于错误的端口号、错误的IP地址等原因引起的。在我的情况下,我所使用的mongodb docker不在与我的服务器相同的网络中,因此,服务器无法从数据库中获取数据。

为了解决/调试它,我做了以下几点:

  1. 获取docker网络列表:
docker network ls
  1. 检查每个网络并查找相应的容器:
docker network inspect [Network Name]
  1. 必须通信的容器必须在同一个网络中。因此,在我的情况下,我只需将服务器容器从其网络中断开连接,并重新连接到 mongodb 网络:
docker network disconnect [Network Name] [Container Name] 
docker network connect [Network Name] [Container Name]    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接