MongoError:getaddrinfo ENOTFOUND 未定义未定义:27017

问题描述 投票:0回答:9

因此,我正在阅读 Manning 的《Getting Mean》一书,并按照第 5 章中的步骤,尝试使用 Mongolab 上的数据库作为 Heroku 的附加组件。当我运行此代码(在本地和 Heroku 上)时,它返回此错误:

MongoError:getaddrinfo ENOTFOUND 未定义未定义: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
9个回答
27
投票

我认为您没有提供

PORT NO.
所需的
mongoDB

请提供

port no.(27017)
以及本地主机。

试试这个:

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

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

我希望这有帮助。


7
投票

如果你使用 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"

6
投票

您刚刚错过了指定端口号,如下所示:

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

确保在生产服务器上托管时更改本地主机。


2
投票

为 mLab 插件创建的 Heroku 环境变量称为

MONGODB_URI
MONGOLAB_URI
可能是遗留的东西)。


2
投票

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

感谢所有提供帮助的人!


1
投票

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

这解决了我的问题。


0
投票

这看起来是正确的。我以前也见过这个错误(很多)。我认为“未定义的未定义”是指您的环境变量未定义。尝试控制台记录您的环境变量以确保它们有效。


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]    

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.