如何在Google Cloud中使用Node.js连接MySQL数据库

4
我有一个 NodeJs 应用程序和 MySQL 数据库。 我已经将 nodejs 应用程序部署在 Google Cloud 上,并在 Google Cloud 中创建了 MySQL 数据库并连接到 nodejs 应用程序。 我能够成功地部署应用程序,但应用程序无法连接到云 mysql 数据库。
但是,当我尝试从本地的 mysql workbench 连接云 mysql 时,它可以成功连接到数据库。而且我也能够从本地的 nodejs 应用程序连接到云 mysql 数据库。
但是,我无法从部署的 nodejs 应用程序连接到云 mysql db。
错误信息:Database is not connectedError: connect ETIMEDOUT
Db.js
var mysql = require('mysql');
var PropertiesReader = require('properties-reader');
var properties = PropertiesReader('./db.properties');

var connection = mysql.createConnection({
    connectionLimit : properties.get('pool'),
    host: properties.get('hostname'),
    user: properties.get('username'),
    password: properties.get('password'),
    database: properties.get('dbname')
});

connection.connect(function (err) {
    if (!err) {
        console.log("Database is connected");
    } else {
        console.log("Database is not connected" + err);
    }
}
);

module.exports = connection;

app.yaml

runtime: nodejs
env: flex

那么就没有错误了吗? - Sagnik Pradhan
是的,它有错误。 - Sangram Badi
你是否按照这里的详细说明,在你的app.yaml文件中添加了环境变量和beta_settings部分:https://cloud.google.com/appengine/docs/flexible/nodejs/using-cloud-sql#setting_connection_strings_and_adding_a_library? - LundinCast
1个回答

2
在mysql的连接配置中,host在App Engine上不起作用。您必须使用socketPath。 socketPath是要连接的Unix域套接字的路径。套接字路径必须像这样: var connection = mysql.createConnection({ socketPath : '/cloudsql/my-project-12345:us-central1:mydatabase', user : 'username', password : 'password', database : 'db_name' }); 如果您在GCloud上使用Postgres,则过程类似,可以在这里找到答案。

注意 - 代码中有错别字。sockePath 应更正为 socketPath。 - jhk
是的,正确的。已修改。 - Pasho Toska

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接