在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 });
并重新启动为我工作。