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

杨威利

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

sheng@Takeshi:~/Work/smr_pjt_loct_dr$ NODE_ENV=production MONGODB_URI=mongodb://heroku_60bjp5jd:[email protected]: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:[email protected]:15712/heroku_60bjp5jd
test the dbURI:mongodb://heroku_60bjp5jd:[email protected]: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:[email protected]:15712/heroku_60bjp5jd
Succeeded connected to: mongodb://heroku_60bjp5jd:[email protected]: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 配置变量,如下表所示:

sheng@Takeshi:~/Work/smr_pjt_loct_dr$ heroku config
=== smr-pjt-loct-dr Config Vars
MONGODB_URI: mongodb://heroku_60bjp5jd:[email protected]: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);}

我猜是mongoose的问题,但是我尝试了很多方法,比如在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); 所以我最好的猜测是您收到的错误源于另一次尝试连接到相同或另一个数据库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Node.js应用程序在本地主机上运行良好,但在Heroku上部署时显示错误

node.js应用程序可在本地运行,但在heroku上部署时会崩溃

Node.js Express应用程序在Heroku上持续崩溃

在 heroku 中部署 node.js / express / mongoDB ( with typescript )

我的 node + express 应用程序在本地部署良好,但在推送到 heroku 时不会部署

MongoDB查询从Heroku上的Node.js应用程序花费2-3秒

cPanel Node.js应用程序无法连接到MongoDB Atlas集群,但可以在Heroku上运行

我正在使用 node js 开发一个应用程序,它在本地运行良好,但在我尝试将其上传到 heroku 时崩溃,它说 cat find dotenv

Mongodb Atlas + Node.js在本地工作,但是在推送到Heroku时停止

如何在Heroku上启用ES2017功能运行Node.js应用程序?

Node.js猫鼬模块在Heroku上失败

从heroku服务器上的node.js应用程序连接远程mysql数据库时出现ETIMEDOUT

在Heroku Node.js应用上上传图像时出错

无法在heroku上使用node.js连接到mongodb-atlas

如何在Heroku上使用Neutrino部署Node.js应用程序

Node.js express 服务器在本地主机上运行,但在 Heroku 主机上有问题

当我关闭cmd时,Heroku中的Node.js应用程序崩溃

推送被拒绝,在 heroku 中部署时无法编译 Node.js 应用程序

尝试在Heroku上部署Node.js / Express / Socket.io应用程序时出现应用程序错误

在 heroku 上使用 Express.js 提供静态文件。文件在 Heroku 中的什么位置?

Heroku上的Python和Node.js

Node js上的Heroku登录问题

在Heroku上运行几个node.js脚本

在Heroku上使用node.js的Pusher / PubNub替代方案

使用node.js在云(heroku)上读写文件

Node.js应用程序在Heroku中部署

无法在 Heroku 上部署 Node.js 应用程序

如何同步Node js应用程序,git和Heroku?

如何在Heroku上远程调试Node.js应用程序?