mongodb MongoError:getaddrinfo ENOTFOUND undefined:27017

xghobddn  于 2023-03-29  发布在  Go
关注(0)|答案(8)|浏览(302)

因此,我正在阅读Manning的Getting Mean一书,并按照第5章中的步骤,尝试使用Mongolab上的db作为Heroku的附加组件。当我运行此代码(本地和Heroku上)时,它返回以下错误:
MongoError:getaddrinfo ENOTFOUND 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*/

有了它在本地运行良好。所以我不知道问题是从哪里来的。有什么建议来解决列出的错误吗?

tnkciper

tnkciper1#

我认为您没有提供mongoDB所需的PORT NO.
请给予port no.(27017)沿着localhost。

试试这个

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

getaddrinfo ENOTFOUND表示客户端无法连接到给定的地址。请尝试使用上述地址。
希望这能帮上忙。

qgzx9mmu

qgzx9mmu2#

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

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

确保在生产服务器上托管时更改localhost。

pxy2qtax

pxy2qtax3#

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

d5vmydt94#

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

ryevplcw

ryevplcw5#

所以我不知道这个过程的哪一部分解决了这个问题,但我完全删除了Heroku的mongolab插件。然后我把它添加回来,用同样的代码执行同样的步骤,它工作了!
感谢所有帮助我们的人!

ldioqlga

ldioqlga6#

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

这为我解决了问题。

mpbci0fu

mpbci0fu7#

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

6rvt4ljy

6rvt4ljy8#

我遇到了同样的错误,但是,在我的情况下,我使用了不同的docker容器。基本上,错误告诉你,你的应用程序无法连接到monogodb服务器。这可能会出现例如错误的端口号,错误的IP地址等。在我的情况下,我的docker上的mongodb与我的服务器不在同一个网络中,所以,服务器无法从数据库中获取数据。
为了解决/调试它,我做了以下几点:
1.获取Docker网络列表:

docker network ls

1.检查每个网络并找到相应的容器:

docker network inspect [Network Name]

1.必须相互通信的容器必须在同一个网络中。所以在我的例子中,我只是断开了服务器容器与其网络的连接,并将其重新连接到mongodb-network:

docker network disconnect [Network Name] [Container Name] 
docker network connect [Network Name] [Container Name]

相关问题