使用端口转发本地连接到实时数据库没有问题,但是当我们从openshift设备进行连接时,我们会收到错误。让我从代码开始:
这是连接变量
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控制台中的错误:
获取http:// ** .rhcloud.com / answerDB 503(服务暂时不可用)
但有时我们会收到代理错误:
获取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)
现在它说不能调用undefined的方法查询。我们认为这很奇怪,所以我们将'connection.query'更改为'connectionpool.query'然后它告诉我们它不能调用undefined的方法发布。所以我们将'connection.release()'改为'connectionpool.release()',它告诉我们对象#没有方法释放。所以我正在把这部分错误带走。
我们不知道为什么它不会连接。任何信息将不胜感激 - 谢谢。
答案 0 :(得分:0)
您是否创建了该数据库名称?它应该是您的应用程序的名称。您可以将OPENSHIFT_APP_NAME环境变量用于数据库名称。你可以直接进入你的设备并连接到mysql没有任何问题吗?另外,您是否尝试从本地机器或您的openshift设备连接到您的openshift设备上的数据库?
答案 1 :(得分:0)
如果您的应用程序代码在连接到远程OpenShift托管的数据库(使用rhc port-forward
)时在本地工作,那么我怀疑您的应用程序可能有一些未记录的依赖项。
可能是您在开发环境中已在本地(或全局)安装了某些内容,但未在应用程序的package.json文件中包含该dep。
确保应用在新环境中运行所需的所有内容都包含在应用的package.json
文件中,然后再将其推送到OpenShift。
npm install my_dependency --save
我已经写了一些其他注意事项,这些注释可能对本地使用与OpenShift托管数据库的端口转发连接进行测试很有用:https://www.openshift.com/blogs/set-up-local-access-to-openshift-hosted-services-with-port-forwarding