繁体   English   中英

Heroku Node.js(express.js)应用程序在本地运行,但在使用MongoDB时在heroku上失败

[英]Heroku Node.js (express.js) App Works Locally but failed on heroku when using MongoDB

我有一个基于express.js的node.js应用程序,它在localhost上运行良好,它还可以从localhost连接Mlab数据库:

sheng@Takeshi:~/Work/smr_pjt_loct_dr$ NODE_ENV=production MONGODB_URI=mongodb://heroku_60bjp5jd:PASSWORD@ds115712.mlab.com:15712/heroku_60bjp5jd nodemon start
[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node ./bin/www start`
test:mongodb://heroku_60bjp5jd:PASSWORD@ds115712.mlab.com:15712/heroku_60bjp5jd
test the dbURI:mongodb://heroku_60bjp5jd:PASSWORD@ds115712.mlab.com:15712/heroku_60bjp5jd
Mongoose connected to mongodb://localhost/smr_pjt_loctog
Mongoose log disconnected
Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow multiple credentials on a socket. Please authenticate using MongoClient.connect with auth credentials.
Mongoose connected to mongodb://heroku_60bjp5jd:PASSWORD@ds115712.mlab.com:15712/heroku_60bjp5jd
Succeeded connected to: mongodb://heroku_60bjp5jd:PASSWORD@ds115712.mlab.com:15712/heroku_60bjp5jd

但是当我推送到heroku时,它失败了,错误消息如下所示:

2017-06-14T11:19:43.117450+00:00 app[web.1]: MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]

它说我连接到本地服务器时失败了。 但是,我已经正确设置了heroku config var,如下表所示:

sheng@Takeshi:~/Work/smr_pjt_loct_dr$ heroku config
=== smr-pjt-loct-dr Config Vars
MONGODB_URI: mongodb://heroku_60bjp5jd:PASSWORD@ds115712.mlab.com:15712/heroku_60bjp5jd
NODE_ENV:    production

至于MLAB数据库URI,我可以使用db.js文件中的以下代码获取它:

if (process.env.NODE_ENV === 'production') {
console.log("test:" + process.env.MONGODB_URI);
dbURI = process.env.MONGODB_URI;
console.log('test the dbURI:' + dbURI);}

我猜问题出在猫鼬身上,但是我尝试了很多方法,例如,在package.json文件中升级和指定Node和NPM的版本,或者安装MongoDB驱动程序。

但是它无法工作,我删除了下面的猫鼬连接代码:

mongoose.connect(dbURI, function (err, res) {
  if (err) {
  console.log ('ERROR connecting to: ' + dbURI + '. ' + err);
  } else {
  console.log ('Succeeded connected to: ' + dbURI);
  }
});

并且错误消息仍然相同:

2017-06-14T11:19:43.117450+00:00 app[web.1]: MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]

而且我实际上是通过正确使用heroku插件来设置Mlab数据库的,从此处的图像描述可以看出:

有没有人可以帮助我? 的确感谢!

更新:

至于我从heroku日志中发现的错误消息:

2017-06-14T16:21:49.064801+00:00 app[web.1]: MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
2017-06-14T16:21:49.064802+00:00 app[web.1]:     at Pool.<anonymous> (/app/node_modules/mongodb-core/lib/topologies/server.js:328:35)
2017-06-14T16:21:49.064803+00:00 app[web.1]:     at emitOne (events.js:96:13)
2017-06-14T16:21:49.064804+00:00 app[web.1]:     at Pool.emit (events.js:191:7)
2017-06-14T16:21:49.064805+00:00 app[web.1]:     at Connection.<anonymous> (/app/node_modules/mongodb-core/lib/connection/pool.js:280:12)
2017-06-14T16:21:49.064805+00:00 app[web.1]:     at Object.onceWrapper (events.js:293:19)
2017-06-14T16:21:49.064806+00:00 app[web.1]:     at emitTwo (events.js:106:13)
2017-06-14T16:21:49.064807+00:00 app[web.1]:     at Connection.emit (events.js:194:7)
2017-06-14T16:21:49.064808+00:00 app[web.1]:     at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:177:49)
2017-06-14T16:21:49.064808+00:00 app[web.1]:     at Object.onceWrapper (events.js:293:19)
2017-06-14T16:21:49.064809+00:00 app[web.1]:     at emitOne (events.js:96:13)
2017-06-14T16:21:49.064809+00:00 app[web.1]:     at Socket.emit (events.js:191:7)
2017-06-14T16:21:49.064810+00:00 app[web.1]:     at emitErrorNT (net.js:1279:8)
2017-06-14T16:21:49.064811+00:00 app[web.1]:     at _combinedTickCallback (internal/process/next_tick.js:80:11)
2017-06-14T16:21:49.064812+00:00 app[web.1]:     at process._tickCallback (internal/process/next_tick.js:104:9)

我还没有发现任何与mongose相关的东西,似乎mongodb-core应该负责数据库的连接,但是,我根本没有使用过npm_module。

我试图删除整个node_module文件夹,并使用npm install再次安装它们,但仍然无法正常工作。

另外,我尝试获取本地主机的netstat:

sheng@Takeshi:~/Work/smr_pjt_loct_dr$ sudo netstat -atunlp | grep "27017"
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      1034/mongod

解决了:

问题已解决,感谢@vsenko的帮助,哈哈哈!!! 我还有本地数据库的另一个连接,但是我没有注意到。

据我所知,在连接失败的情况下,您收到的错误消息不包含您写入控制台的字符串: console.log ('ERROR connecting to: ' + dbURI + '. ' + err); 因此,我最好的猜测是,您收到的错误源于另一次尝试连接到相同或另一个数据库的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM