因此,我正在阅读 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*/
这样它在本地运行良好。所以我不确定问题来自哪里。对于解决列出的错误有什么建议吗?
我认为您没有提供
PORT NO.
所需的 mongoDB
。
请提供
port no.(27017)
以及本地主机。
试试这个:
var dbURI = "mongodb://127.0.0.1:27017/loc8r";
getaddrinfo ENOTFOUND
表示客户端无法连接到给定的地址。请尝试使用上面的地址。
我希望这有帮助。
我有同样的问题,其他解决方案对我不起作用,但我用这种方式做到了
对于 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"
您刚刚错过了指定端口号,如下所示:
var dbURI = "mongodb://localhost:27017/thenDBname"
确保在生产服务器上托管时更改本地主机。
为 mLab 插件创建的 Heroku 环境变量称为
MONGODB_URI
(MONGOLAB_URI
可能是遗留的东西)。
所以我不确定这个过程的哪一部分解决了这个问题,但我完全从 Heroku 中删除/删除了 mongolab 插件。然后我将其重新添加并使用相同的代码执行相同的步骤,它成功了!
感谢所有提供帮助的人!
为 mLab 插件创建的 Heroku 环境变量称为 MONGODB_URI(MONGOLAB_URI 可能是遗留的东西)。 (pneumee)
这解决了我的问题。
这看起来是正确的。我以前也见过这个错误(很多)。我认为“未定义的未定义”是指您的环境变量未定义。尝试控制台记录您的环境变量以确保它们有效。
我遇到了同样的错误,但是,就我而言,我使用了不同的 docker 容器。基本上,该错误是告诉您您的应用程序无法连接到
monogodb
服务器。例如,这可能是由错误的端口号、错误的 IP 地址等引起的。在我的例子中,我的 mongodb
的 docker 与我的服务器不在同一网络中,因此服务器无法从数据库获取数据。
为了解决/调试它,我做了以下操作:
docker network ls
docker network inspect [Network Name]
mongodb
-网络:docker network disconnect [Network Name] [Container Name]
docker network connect [Network Name] [Container Name]