Heroku + MongoLab插件与Node.js应用程序连接错误 – 错误:连接ECONNREFUSED 127.0.0.1:27017

当试图通过MongoLab插件启动Heroku上托pipe的Node.js应用程序时,在连接到MongoDB时,Heroku日志中出现以下错误。 它看起来像试图连接到一个本地mongo,即使我已经设置了heroku环境variables。

我的整个代码在GitHub上: https : //github.com/yhagio/meetup_planner

我的这个问题的要点

Heroku日志

2015-11-28T22:22:58.460531+00:00 heroku[web.1]: Starting process with command `node server.js` 2015-11-28T22:22:59.353911+00:00 app[web.1]: Server started at port number: 38701 2015-11-28T22:22:59.303795+00:00 app[web.1]: Connecting to DB : mongodb://USERNAME:PASSWORD@ds059804.mongolab.com:59804/heroku_tb6frdh6 2015-11-28T22:22:59.371719+00:00 app[web.1]: 2015-11-28T22:22:59.371723+00:00 app[web.1]: /app/node_modules/mongodb/lib/server.js:235 2015-11-28T22:22:59.371725+00:00 app[web.1]: process.nextTick(function() { throw err; }) 2015-11-28T22:22:59.371725+00:00 app[web.1]: ^ 2015-11-28T22:22:59.371729+00:00 app[web.1]: Error: connect ECONNREFUSED 127.0.0.1:27017 2015-11-28T22:22:59.371730+00:00 app[web.1]: at Object.exports._errnoException (util.js:860:11) 2015-11-28T22:22:59.371731+00:00 app[web.1]: at exports._exceptionWithHostPort (util.js:883:20) 2015-11-28T22:22:59.371732+00:00 app[web.1]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1063:14) 2015-11-28T22:23:00.052255+00:00 heroku[web.1]: Process exited with status 1 2015-11-28T22:23:00.880672+00:00 app[web.1]: Connecting to DB : mongodb://USERNAME:PASSWORD@ds059804.mongolab.com:59804/heroku_tb6frdh6 2015-11-28T22:23:00.939388+00:00 app[web.1]: 2015-11-28T22:23:00.939392+00:00 app[web.1]: /app/node_modules/mongodb/lib/server.js:235 2015-11-28T22:23:00.939393+00:00 app[web.1]: process.nextTick(function() { throw err; }) 2015-11-28T22:23:00.939397+00:00 app[web.1]: Error: connect ECONNREFUSED 127.0.0.1:27017 2015-11-28T22:23:00.939394+00:00 app[web.1]: ^ 2015-11-28T22:23:00.939398+00:00 app[web.1]: at Object.exports._errnoException (util.js:860:11) 2015-11-28T22:23:00.939399+00:00 app[web.1]: at exports._exceptionWithHostPort (util.js:883:20) 2015-11-28T22:23:00.939400+00:00 app[web.1]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1063:14) 2015-11-28T22:23:00.917276+00:00 app[web.1]: Server started at port number: 42573 2015-11-28T22:23:01.626965+00:00 heroku[web.1]: State changed from starting to crashed 2015-11-28T22:23:01.614846+00:00 heroku[web.1]: Process exited with status 1 2015-11-28T22:23:13.224552+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=warm-retreat-5113.herokuapp.com request_id=54404d8a-7744-49ae-b744-4417abd4b347 fwd="166.62.227.154" dyno= connect= service= status=503 bytes= 2015-11-28T22:23:13.581322+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=warm-retreat-5113.herokuapp.com request_id=063c0fef-8260-46b5-a0f6-b4d546e9a60b fwd="166.62.227.154" dyno= connect= service= status=503 bytes= 

这里是我连接到MongoDB的代码(Heroku的MongoLab插件) server / db_connection.js

 var mongoose = require('mongoose'); var config = require('../express-config'); var userModel = require('./models/user'); var eventModel = require('./models/event'); function makeDefaultConnection() { var uri = process.env.MONGOLAB_URI || '127.0.0.1/meetupplanner'; console.log('Connecting to DB : ', uri); var conn = mongoose.createConnection(uri); conn.on('error', function(err){ console.log('Connection Error ::: ', err); }); conn.model('User', userModel.userSchema); conn.model('Event', eventModel.eventSchema); return conn; } module.exports.defaultConnection = makeDefaultConnection(); 

轮廓

 web: node server.js 

Server.js

 ... var port = process.env.PORT || 3000; app.listen(port, function() { console.log('Server started at port number: ', port); }); 

在Heroku上添加MongoLab插件之后,我validation了我的MONGOLAB_URI在Heroku上设置(Settings> Config Variables)

参考: https : //devcenter.heroku.com/articles/mongolab

在StackOverflow上提出了类似的问题:

  • 在heroku上无法通过node.js连接到mongolab
  • 使用Heroku插件mongolab和node.js

请注意,我可以通过以下方式连接到mongo shell:

 $ mongo ds059804.mongolab.com:59804/heroku_tb6frdh6 -u USERNAME -p PASSWORD 

我认为证书是好的。

我终于想通了。 这是connect-mongo会话的中间件configuration。

在我的configuration中,它是:

 app.use(session({ ... // ===== Following 3 lines are trying to connect to local db ===== store: new MongoStore({ 'db': 'meetupplanner' }), // ===== So, I replaced 3 lines above with following ===== store: new MongoStore({ url: process.env.MONGOLAB_URI }), ... 

下一步,为什么不这样做,以确保configurationvariables正在通过

 var uri = process.env.MONGOLAB_URI || config.dbHostName; console.log('===== Connecting to DB ... =====', uri); var conn = mongoose.createConnection(uri,...