mysql - 无法连接到 Nodejs Openshift 应用程序中的实时数据库

标签 mysql node.js openshift http-status-code-503

我使用端口转发在本地连接到实时数据库没有遇到任何问题,但是当我们从 openshift gear 进行连接时,我们会收到错误。让我从代码开始:

这是连接变量

var connectionpool = mysql.createPool({
         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 : 'stembuds',
         socket   : process.env.OPENSHIFT_MYSQL_DB_SOCKET
     });

这是一个查询示例:

app.get('/answerDB/:course?/:answerID?', function(req, res){
var course = req.param('course');
var answerID = req.param('answerID');
connectionpool.getConnection(function(err, connection){
    if(err){
        console.error('CONNECTION error: ',err);
        res.statusCode = 503;
        res.send({
            result: 'error',
            err:    err.code
        });
    }
    if (course === undefined && answerID === undefined) {
        connection.query('SELECT * FROM questions WHERE counter = 0', function(err, rows, fields){
            if (err) {
                console.error(err);
                res.statusCode = 500;
                res.send({
                    result: 'error',
                    err:    err.code
                });
            }
            for(var i in rows){
                var newCourse = rows[i].course;
                newCourse = courses[newCourse];
                rows[i].course = newCourse;
            }
            res.send(rows);
            connection.release();
        });
    }

以下是我们收到的一些错误。

首先是 Chrome 控制台中的错误:

GET http://**.rhcloud.com/answerDB 503(服务暂时不可用)

但有时我们会遇到代理错误:

GET http://**.rhcloud.com/exploreDB 502(代理错误)

此外,我一直在运行命令 rhc tail -a nodejs,这是我收到的错误

 CONNECTION error:  { [Error: ER_ACCESS_DENIED_ERROR: Access denied for user          'adminMYXaSuf'@'127.11.28.130' (using password: YES)]
  code: 'ER_ACCESS_DENIED_ERROR',
  errno: 1045,
  sqlState: '28000',
  fatal: true }
TypeError: Cannot call method 'query' of undefined
    at /var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/routes/site.js:172:15
    at Pool.<anonymous> (/var/lib/openshift/5303aee55973ca4092000084/app-    root/runtime/repo/node_modules/mysql/lib/Pool.js:49:16)
    at Handshake.Sequence.end (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:24)
    at Handshake.ErrorPacket (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/sequences/Handshake.js:93:8)
    at Protocol._parsePacket (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/Protocol.js:202:24)
    at Parser.write (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.<anonymous> (/var/lib/openshift/5303aee55973ca4092000084/app-root/runtime/repo/node_modules/mysql/lib/Connection.js:72:28)
    at Socket.EventEmitter.emit (events.js:95:17)
    at Socket.<anonymous> (_stream_readable.js:720:14)

现在说无法调用未定义的方法查询。我们认为这很奇怪,所以我们将“connection.query”更改为“connectionpool.query”,然后它告诉我们它不能调用未定义的方法release。因此,我们将“connection.release()”更改为“connectionpool.release()”,它告诉我们该对象没有释放方法。所以我对这部分错误持保留态度。

我们不知道为什么它无法连接。任何信息将不胜感激 - 谢谢。

最佳答案

如果您的应用程序代码在连接到远程 OpenShift 托管的数据库(使用 rhc port-forward)时在本地运行,那么我怀疑您的应用程序可能具有一些未记录的依赖项。

可能是您在开发环境中本地(或全局)安装了某些内容,而没有将该 dep 包含在应用的 package.json 文件中。

在将应用推送到 OpenShift 之前,请确保应用在全新环境中运行所需的所有内容都包含在应用的 package.json 文件中。

npm install my_dependency --save

我写了一些额外的注释,这些注释对于通过端口转发连接到 OpenShift 托管的数据库进行本地测试可能有用:https://www.openshift.com/blogs/set-up-local-access-to-openshift-hosted-services-with-port-forwarding

关于mysql - 无法连接到 Nodejs Openshift 应用程序中的实时数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23636466/

相关文章:

openshift - 无法从 Eclipse 登录开放类次

java - 如何欺骗 NetworkInterface.getHardwareAddress() (Java)

如果字段重复,Php sql 只回显一行

javascript - 为什么nodejs中的sleep不能按预期工作

node.js - 我无法安装 node-libcurl 模块

javascript - 路由到 Node.js 请求收到的 View

java - CORS : Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request

mysql - 将 UTC 时间字符串转换为 Unix 时间

php - php中的mysql_query会同时阻塞查询吗?

python - 使用python从MySQL中提取两个时间范围之间的数据