在openshift通过节点js应用程序连接到mysql数据库时出错

我有一个节点js应用程序快速部署在openshift。 我已经通过phpmyadmin 4.0盒式磁带创build数据库。 我能够连接到数据库,但是当我做任何查询它会引发错误ECONNREFUSED。

我得到这个错误作为我的浏览器上的响应如下,

{"status":false,"error":{"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect","fatal":true}} 

我的应用程序的代码是这样的,

  var connection = mysql.createConnection({ host : process.env.OPENSHIFT_MYSQL_DB_HOST, user : process.env.OPENSHIFT_MYSQL_DB_USERNAME, password : process.env.OPENSHIFT_MYSQL_DB_PASSWORD, database : process.env.OPENSHIFT_GEAR_NAME }); connection.connect(); console.log("connected to login database"); var strQuery="insert into login values('"+req.body.uname+"','"+req.body.password+"','"+req.body.name+"','"+req.body.mobile+"');"; connection.query( strQuery, function(err){ if(err) { res.json({ "status":false, "error":err }); res.end(); }else{ res.json({"status":true }); res.end(); } }); connection.end(); 

我在这里find了答案ECONNREFUSED – 节点js,sql

但我只能通过phpmyadmin 4.0访问我的数据库,我该如何解决这个问题?

编辑:下面的答案是不完全有效的,因为重新启动应用程序解决了这个问题,但我希望以下可能会帮助别人有类似的问题。

转到您的应用程序控制台,单击nodejs应用程序,在那里添加mysql磁盘盒。 一旦你这样做,你应该可以访问variables。 我怀疑你为mysql创build了一个单独的应用程序,而不是将它添加到现有的节点之一。

我可以通过在默认的nodejs应用程序盒式磁带中创build一个简单的快速path来打印所有的variables:

 self.routes['/vars'] = function(req, res) { var html = "<html><body>Host: " + process.env.OPENSHIFT_MYSQL_DB_HOST + "<br />"; html += "Port: " + process.env.OPENSHIFT_MYSQL_DB_PORT + "<br />"; html += "User: " + process.env.OPENSHIFT_MYSQL_DB_USERNAME + "<br />"; html += "Pass: " + process.env.OPENSHIFT_MYSQL_DB_PASSWORD + "<br />"; html += "Sock: " + process.env.OPENSHIFT_MYSQL_DB_SOCK + "<br />"; html += "URL: " + process.env.OPENSHIFT_MYSQL_DB_URL + "<br />"; html += "</body></html>" res.send(html); } 

点击http://<openshift_application_url>/vars返回(这对你来说会有所不同):

 Host: 127.6.20.2 Port: 3306 User: adminPAkSHvw Pass: d7DX9ATPh4uG Sock: undefined URL: mysql://adminPAkSHvw:d7DX9ATPh4uG@127.6.20.2:3306/ 

完整的server.js在这里,以防止你想尝试复制/粘贴。 如果MySQL盒式磁带存在于您的节点+快递应用程序中,您将得到打印出的增值税,然后您的代码应该工作。

我只是添加主机名,现在我添加了端口

  var connection = mysql.createConnection({ host : process.env.OPENSHIFT_MYSQL_DB_HOST, port :process.env.OPENSHIFT_MYSQL_DB_PORT, user : process.env.OPENSHIFT_MYSQL_DB_USERNAME, password : process.env.OPENSHIFT_MYSQL_DB_PASSWORD, database : process.env.OPENSHIFT_GEAR_NAME }); 

并重新启动为我工作。