我有一个带有express的节点js app,它部署在openshift上。我通过phpmyadmin 4.0 cartridge创建了数据库。 我能够连接到数据库,但是当我进行任何查询时,它会抛出错误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();
我在这里找到了答案connect ECONNREFUSED - node js , sql
但我只能通过phpmyadmin 4.0访问我的数据库,如何解决这个问题?
答案 0 :(得分:3)
编辑:下面的答案并不完全有效,因为重新启动应用程序解决了这个问题,但我希望以下内容可以帮助其他有类似问题的人。
转到你的Application控制台,点击nodejs应用程序,在那里添加mysql盒。一旦你这样做,你应该访问vars。我怀疑您为mysql创建了一个单独的应用程序,而不是将其添加到现有节点中。
我能够通过在默认的nodejs应用程序盒中创建一个简单的快速路径来打印所有变量:
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
为here,以防您想尝试复制/粘贴。如果您的节点+ Express应用程序中存在MySQL盒式磁带,您将打印出vars,然后您的代码就可以正常工作。
答案 1 :(得分:1)
我只是添加了主机名,现在我添加了端口
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
});
并且重启对我有用。