通过node js app连接到openshift中的mysql数据库时出错

时间:2014-09-03 07:25:37

标签: javascript mysql node.js phpmyadmin

我有一个带有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访问我的数据库,如何解决这个问题?

2 个答案:

答案 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.jshere,以防您想尝试复制/粘贴。如果您的节点+ 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

  });

并且重启对我有用。