【问题标题】:Failing to connect to mongo when deploying to Heroku部署到 Heroku 时无法连接到 mongo
【发布时间】:2020-03-22 00:41:30
【问题描述】:

我正在尝试将我的节点应用程序部署到 Heroku。

我已经添加了 MLab MongoDB 插件并设置了配置变量

$ heroku config
=== thevoyageapp Config Vars
MONGODB_URI:            mongodb://heroku_f80ngvbz:btt04p7erog80@ds.mlab.com:11/herokgvbz

并已将 process.env.MONGODB_URI 添加到我的 mongo 连接

const mongoose = require('mongoose');
let url = process.env.MONGODB_URI || 'mongodb://localhost/trip';
mongoose.connect(url, { useMongoClient: true });

但我仍然收到此错误:

2018-01-23T06:00:15.722831+00:00 heroku[web.1]: Starting process with command `node server/index.js`
2018-01-23T06:00:17.808211+00:00 app[web.1]: mongodb://heroku_f80ngvbz:btt04p7erog80cot3ufp1@ds.mlab.com:11/heroku_f80ngvbz
2018-01-23T06:00:17.807864+00:00 app[web.1]: listening on port 3000         ^
2018-01-23T06:00:17.835657+00:00 app[web.1]: MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
2018-01-23T06:00:17.835658+00:00 app[web.1]:     at Pool.<anonymous> (/app/node_modules/mongodb-core/lib/topologies/server.js:336:35)
2018-01-23T06:00:17.835659+00:00 app[web.1]:     at emitOne (events.js:116:13)
2018-01-23T06:00:17.835663+00:00 app[web.1]:     at Connection.emit (events.js:214:7)
2018-01-23T06:00:17.835660+00:00 app[web.1]:     at Pool.emit (events.js:211:7)
2018-01-23T06:00:17.835661+00:00 app[web.1]:     at Object.onceWrapper (events.js:317:30)
2018-01-23T06:00:17.835661+00:00 app[web.1]:     at Connection.<anonymous> (/app/node_modules/mongodb-core/lib/connection/pool.js:280:12)
2018-01-23T06:00:17.835664+00:00 app[web.1]:     at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:189:49)
2018-01-23T06:00:17.835662+00:00 app[web.1]:     at emitTwo (events.js:126:13)
2018-01-23T06:00:17.835664+00:00 app[web.1]:     at Object.onceWrapper (events.js:315:30)
2018-01-23T06:00:17.835665+00:00 app[web.1]:     at emitOne (events.js:116:13)
2018-01-23T06:00:17.835666+00:00 app[web.1]:     at Socket.emit (events.js:211:7)
2018-01-23T06:00:17.835667+00:00 app[web.1]:     at emitErrorNT (internal/streams/destroy.js:64:8)
2018-01-23T06:00:17.835668+00:00 app[web.1]:     at _combinedTickCallback (internal/process/next_tick.js:138:11)
2018-01-23T06:00:17.835668+00:00 app[web.1]:     at process._tickCallback (internal/process/next_tick.js:180:9)
2018-01-23T06:00:17.940249+00:00 heroku[web.1]: State changed from starting to crashed
2018-01-23T06:00:17.926212+00:00 heroku[web.1]: Process exited with status 1

知道可能是什么问题吗?

【问题讨论】:

  • 从日志中,它似乎无法从 process.env.MONGODB_URI 获取值并回退到 localhost。
  • 您好,您已在连接字符串中将用户名和密码发布到数据库。请确保尽快重置您的数据库密码。 (将来,您应该确保在公开发布之前从连接字符串中删除您的用户名和密码)
  • 我同意道格的观点。也许您没有提交最近的更改,您将 url 设置为 process.env.MONGODB_URI 或者您在代码中的其他地方连接到 localhost?
  • 如果您查看错误的第 2 行,我会记录 process.env.MONGODB_URI 的控制台日志,它会显示正确的 mongodb uri。
  • 您的代码未使用该 URI 进行连接。它正在尝试连接到本地主机。你能粘贴你的整个 server/index.js 文件吗?

标签: javascript mongodb heroku mongoose mlab


【解决方案1】:

您很可能忘记将访问 MongoDB 数据库的服务器 IP 列入白名单。您可以在 MongoDB Atlas 上将 IP 列入白名单。

【讨论】:

  • 代码尝试连接本地主机,而不是远程数据库。
猜你喜欢
  • 2020-10-01
  • 2012-05-26
  • 2019-12-16
  • 2020-02-29
  • 2021-08-05
  • 2016-10-19
  • 2021-05-02
  • 2016-04-08
相关资源
最近更新 更多