无法从App Engine中的节点JS连接到云MySQL
我有一个使用MySQL的NodeJS应用程序,可以在本地运行,但是现在我已经在app Engine中部署了它,我需要将它连接到MySQL Google Cloud,我已经创建了MySQL实例和数据库,但是我无法将我的应用程序(应用程序引擎中的NodeJS)连接到MySQL Cloud中的数据库,我使用以下代码:无法从App Engine中的节点JS连接到云MySQL,mysql,node.js,google-app-engine,google-cloud-platform,Mysql,Node.js,Google App Engine,Google Cloud Platform,我有一个使用MySQL的NodeJS应用程序,可以在本地运行,但是现在我已经在app Engine中部署了它,我需要将它连接到MySQL Google Cloud,我已经创建了MySQL实例和数据库,但是我无法将我的应用程序(应用程序引擎中的NodeJS)连接到MySQL Cloud中的数据库,我使用以下代码: const mysql = require('mysql'); var con = mysql.createConnection({ host: "host-IP&qu
const mysql = require('mysql');
var con = mysql.createConnection({
host: "host-IP",
socketPath: "/cloudsql/project:region:instance",
user: "USERNAME",
password: "USERPASSWORD"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
module.exports = con;
亚马尔档案馆---------------------------
runtime: nodejs
env: flex
env_variables:
SQL_USER: "USERNAME"
SQL_PASSWORD: "USERPASSWORD"
SQL_DATABASE: "DBNAME"
INSTANCE_CONNECTION_NAME: "project:region:instance"
beta_settings:
cloud_sql_instances: "project:region:instance"
请帮助我。从App Engine Flexible连接到云SQL实例有两个选项。您可以通过实例的公共或私有IP进行连接 我的建议是通过私有IP连接,因为私有IP上的连接提供了较低的延迟和有限的攻击向量,因为它们不需要穿越互联网 假设您已经有一个实例并通过公共IP连接,以下是步骤:
实例连接\u名称
。可以通过实例概述,即gcloud sql instances description[instance\u NAME]
命令找到它。它具有projectID:region:instanceName
格式
cloudsql.instances.connect
和
cloudsql.instances.get
权限:
- 云SQL客户端
- 云SQL编辑器
- 云SQL管理
app.yaml
:
Unix套接字
beta_settings:
cloud_sql_instances: INSTANCE_CONNECTION_NAME
TCP端口
beta_settings:
cloud_sql_instances: INSTANCE_CONNECTION_NAME:port
env_variables:
DB_USER: MY_DB_USER
DB_PASS: MY_DB_PASSWORD
DB_NAME: MY_DATABASE
# e.g. my-awesome-project:us-central1:my-cloud-sql-instance
CLOUD_SQL_CONNECTION_NAME: <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>
您可以在和中找到所有详细信息,让mysql受到来自互联网的攻击是一个非常糟糕的主意。阅读REST,其中有一个服务器端脚本,可以处理所有traffuc@nbk对不起,我是新来的,请你再给我解释一下你说的话,以及我如何解决mysql面临攻击的问题,好吗!NodeJS已经是一个服务器端脚本,您希望访问云中的mysql数据。由于您应该使mysql服务器可用,您有一些可能性,您可以为云编写一个nodes js脚本,该脚本将在clud服务器上运行,或者您可以编写一个具有相同意图的php脚本,或者您可以编写一个angularjs脚本,该脚本可以使用ajax从云服务器获取数据。当我想到这一点时,为什么不直接在云中运行nodejs nt呢?看来你已经发布了敏感/私有信息。如果是这种情况,请重置您的密码和/或撤销API密钥和令牌,因为在互联网上发布这些密钥和令牌时会被视为已被泄露。
const createUnixSocketPool = async (config) => {
const dbSocketPath = process.env.DB_SOCKET_PATH || "/cloudsql"
// Establish a connection to the database
return await mysql.createPool({
user: process.env.DB_USER, // e.g. 'my-db-user'
password: process.env.DB_PASS, // e.g. 'my-db-password'
database: process.env.DB_NAME, // e.g. 'my-database'
// If connecting via unix domain socket, specify the path
socketPath: `${dbSocketPath}/${process.env.CLOUD_SQL_CONNECTION_NAME}`,
// Specify additional properties here.
...config
});
}