2017-06-14 74 views
0

我有一个基于express.js的node.js应用程序,它可以在本地主机上正常工作,它也可以连接Mlab数据库本地主机:Heroku Node.js(express.js)应用程序本地工作,但在使用MongoDB时在heroku上失败

[email protected]:~/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的配置var和可以看出以下形式:

[email protected]:~/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);} 

我想问题是关于猫鼬,但我尝试了很多方法, 如升级并指定package.json文件中的节点和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] 

实际上我通过设置MLAB数据库heroku插件正确可以从image description here

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

更新:

至于错误信息,我发现形式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的核心应负责连接数据库,但是,我根本没有使用这个npm_module。

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

此外,我试图让我的本地主机的使用netstat:

[email protected]:~/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的帮助下,哈哈哈! 我有另一个本地数据库连接,我没有注意到它。

回答

0

据我所看到的,您会收到不包含你写慰问字符串错误消息是连接失败的情况下: console.log ('ERROR connecting to: ' + dbURI + '. ' + err); 所以我最好的猜测是错误从另一个尝试接收起源连接到相同或另一个数据库。

+0

是的,mongoose.connect似乎没用,它不会在控制台中显示任何消息。log(),但实际上,当我使用localhost访问Mlab数据库时,它实际上工作,它实际上让我困惑。而且我在我的代码中找不到任何可用于连接数据库的地方。 –

+0

所有的数据库连接代码都在db.js文件中。 –

+0

但你输出的这一行怎么样:'Mongoose连接到mongodb:// localhost/smr_pjt_loctog'? – vsenko

相关问题