【问题标题】:Can't connect to MongoDB using environment variable for Heroku无法使用 Heroku 的环境变量连接到 MongoDB
【发布时间】:2019-09-16 11:25:55
【问题描述】:

当我对 Mongo 数据库连接进行硬编码时,我的应用程序运行良好,但是当我尝试使用环境变量时,我在下面的日志转储中得到错误。

我设置环境变量如下:

$ heroku config:set MONGODB_URI='mongodb+srv://user:password@cluster0-ua7mc.mongodb.net/local_library?retryWrites=true'

(注意:我尝试了多次使用和不使用引号的迭代,并确保用户名和密码正确等)

这里是日志转储:


2019-04-26T23:54:22.761573+00:00 heroku[web.1]: Restarting
2019-04-26T23:54:22.768606+00:00 heroku[web.1]: State changed from up to starting
2019-04-26T23:54:22.587447+00:00 app[api]: Release v14 created by user user@hotmail.com
2019-04-26T23:54:22.587447+00:00 app[api]: Set MONGODB_URI config vars by user user@hotmail.com
2019-04-26T23:54:23.508862+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2019-04-26T23:54:23.588782+00:00 heroku[web.1]: Process exited with status 143
2019-04-26T23:54:26.341850+00:00 heroku[web.1]: Starting process with command `npm start`
2019-04-26T23:54:28.837322+00:00 app[web.1]:
2019-04-26T23:54:28.837353+00:00 app[web.1]: > express-locallibrary-tutorial@0.0.0 start /app
2019-04-26T23:54:28.837356+00:00 app[web.1]: > node ./bin/www
2019-04-26T23:54:28.837357+00:00 app[web.1]:
2019-04-26T23:54:30.638883+00:00 heroku[web.1]: State changed from starting to up
2019-04-26T23:54:30.921094+00:00 app[web.1]: MongoDB Connection Error { MongoNetworkError: connection 5 to cluster0-shard-00-02-ua7mc.mongodb.net:27017 closed
2019-04-26T23:54:30.921142+00:00 app[web.1]: at TLSSocket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:352:9)
2019-04-26T23:54:30.921145+00:00 app[web.1]: at Object.onceWrapper (events.js:273:13)
2019-04-26T23:54:30.921146+00:00 app[web.1]: at TLSSocket.emit (events.js:182:13)
2019-04-26T23:54:30.921148+00:00 app[web.1]: at _handle.close (net.js:610:12)
2019-04-26T23:54:30.921150+00:00 app[web.1]: at TCP.done (_tls_wrap.js:386:7)
2019-04-26T23:54:30.921151+00:00 app[web.1]: name: 'MongoNetworkError',
2019-04-26T23:54:30.921153+00:00 app[web.1]: errorLabels: [ 'TransientTransactionError' ],
2019-04-26T23:54:30.921155+00:00 app[web.1]: [Symbol(mongoErrorContextSymbol)]: {} }
2019-04-26T23:55:26.350787+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/catalog" host=immense-bucket-10578.herokuapp.com request_id=65fc54a9-5195-463b-a31a-f0ece0248800 fwd="47.136.227.118" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=https
2019-04-26T23:55:26.352964+00:00 app[web.1]: GET /catalog - - ms - -

处理Mongo Connection和环境变量的代码在这里:

var mongoose = require('mongoose');
var dev_db_url = 'mongodb+srv://user:password@cluster0-r92qb.mongodb.net/local_library?retryWrites=true';
var mongoDB = process.env.MONGODB_URI || dev_db_url;
mongoose.connect(mongoDB, {useNewUrlParser: true});


var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

如果有任何想法,提前非常感谢!

解决方案:将白名单 IP 更改为 0.0.0.0/0 解决了该问题。

【问题讨论】:

    标签: node.js mongodb express heroku


    【解决方案1】:

    尝试通过仪表板设置变量。如果仍然无法连接,那么问题应该出在您的 mongo URI 上。

    【讨论】:

    • 感谢您的建议。我做了以下事情: 1. 我按照您的建议在仪表板中设置了新旧变量。 2. 我将新旧config 设置硬编码到我的代码中。这样做,我能够确定问题肯定出在新的config 设置mongodb+srv://user:password@cluster0-ua7mc.mongodb.net/local_library?retryWrites=true 中。但是我已经多次查看了设置,我找不到任何问题。新旧config 相同。唯一的区别是 cluster r92qbua7mc。其他一切都是一样的。
    • 查看此链接。我会帮你的。 stackoverflow.com/questions/52153538/… 搜索这些关键字“MongoNetworkError TransientTransactionError”。很抱歉,我不是专家,无法说出究竟是什么问题。希望这会有所帮助:)
    • 谢谢!将白名单 IP 更改为 0.0.0.0/0 解决了问题!
    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2017-09-20
    • 2021-05-11
    • 2019-12-16
    • 2020-10-01
    相关资源
    最近更新 更多