我有一个基于 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] 删除。
我来说两句