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

Javascript 通过node js app连接openshift中的mysql数据库时出错,javascript,mysql,node.js,phpmyadmin,Javascript,Mysql,Node.js,Phpmyadmin,我有一个部署在openshift上的带有express的NodeJS应用程序。我已经通过phpmyadmin 4.0盒带创建了数据库。 我可以连接到数据库,但当我进行任何查询时,它会抛出错误 我在我的浏览器上得到了如下响应: {"status":false,"error":{"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect","fatal":true}} 我的应用程序的代码如下所示 var connec

我有一个部署在openshift上的带有express的NodeJS应用程序。我已经通过phpmyadmin 4.0盒带创建了数据库。 我可以连接到数据库,但当我进行任何查询时,它会抛出错误

我在我的浏览器上得到了如下响应:

{"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();
我在这里找到了答案

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

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

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

通过在默认的nodejs应用程序盒带中创建一个简单的快速路由,我可以打印出所有的VAR:

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);
}
完整的server.js是为了防止您尝试复制/粘贴。如果您的node+express应用程序中存在MySQL盒带,您将打印出VAR,然后您的代码将正常工作。

编辑:下面的答案并不完全有效,因为重新启动应用程序解决了问题,但我希望下面的内容可以帮助其他人解决类似问题

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

通过在默认的nodejs应用程序盒带中创建一个简单的快速路由,我可以打印出所有的VAR:

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);
}

完整的server.js是为了防止您尝试复制/粘贴。如果您的node+express应用程序中存在MySQL盒带,您将打印出VAR,然后您的代码将正常工作。

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

    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

  });

重新启动对我有效。

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

    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

  });


重启对我来说很有效。

你的mysql服务器和应用程序在同一台机器上吗?如何创建用户权限?MySQL连接不仅仅是用户名/密码。它还使用主机名。检查应用程序运行的主机是否具有连接mysql服务器的权限检查process.env.OPENSHIFT\u mysql\u DB\u主机这是OPENSHIFT上的一个环境变量,用于定义主机您可以截屏应用程序吗?我主要要求确保MySQL盒带是在相同的设备中创建的。@brennebeck,我已经创建了一个不可扩展的应用程序,所以MySQL盒带将只在相同的设备中。抱歉,澄清一下:您的MySQL盒带已经在相同的设备中了吗?不在单独的应用程序/齿轮中?如果是,那么当您登录时process.env.OPENSHIFT\u MYSQL\u DB\u主机是什么?您的MYSQL服务器和应用程序是否在同一台机器上?如何创建用户权限?MySQL连接不仅仅是用户名/密码。它还使用主机名。检查应用程序运行的主机是否具有连接mysql服务器的权限检查process.env.OPENSHIFT\u mysql\u DB\u主机这是OPENSHIFT上的一个环境变量,用于定义主机您可以截屏应用程序吗?我主要要求确保MySQL盒带是在相同的设备中创建的。@brennebeck,我已经创建了一个不可扩展的应用程序,所以MySQL盒带将只在相同的设备中。抱歉,澄清一下:您的MySQL盒带已经在相同的设备中了吗?不在单独的应用程序/齿轮中?如果是这样的话,你登录时process.env.OPENSHIFT\u MYSQL\u DB\u主机是什么?嘿,谢谢你的回答,我觉得是什么东西阻碍了我通过http响应发送环境变量,我已经安装了MYSQL卡带,我只为node js使用了一个档位,mysql和phpadmin在同一档位上运行,因为应用程序不可伸缩,只是一个更正,如果您使用process.env.OPENSHIFT\u mysql\u DB\u SOCK,您不需要process.env.OPENSHIFT\u mysql\u DB\u端口和process.env.OPENSHIFT\u mysql\u DB\u主机,无论如何,如果您指定套接字,主机和端口将被忽略。为了清晰起见,我刚刚打印了所有与mysql相关的变量。我使用了您也使用过的基本nodejs应用程序,是吗?所以我不确定是什么阻止了您访问vars。需要在mysql中创建数据库后重新启动应用程序,它很有效。太棒了!最简单的解释是,嗯?嘿,谢谢你的回答,我想这是阻碍我通过http响应发送环境变量的原因,我安装了mysql盒带,我只使用了一个gear for node js,mysql和phpadmin在同一个gear上运行,因为应用程序不可伸缩,只是一个更正,如果您正在使用process.env.OPENSHIFT\u MYSQL\u DB\u端口和process.env.OPENSHIFT\u MYSQL\u DB\u主机,那么无论如何,您都不需要process.env.OPENSHIFT\u MYSQL\u DB\u SOCK
如果您指定套接字,e主机和端口将被忽略。为了清晰起见,我刚刚打印了所有与mysql相关的变量。我使用了您也使用过的基本nodejs应用程序,是吗?所以我不确定是什么阻止了您访问vars。需要在mysql中创建数据库后重新启动应用程序,它很有效。太棒了!最简单的解释,嗯?