mysql - nodeJS 应用程序无法连接到谷歌 MySQL 数据实例
问题描述
我在付费帐户下的谷歌控制台中托管了一个 nodeJS 应用程序。当我尝试将我的 nodeJS 应用程序连接到 localhost 服务器中的 MySQL db 时,它正在工作,但是一旦我将其配置为在谷歌云控制台中工作,它就会说无法连接到数据库。我成功创建了一个谷歌 SQL 实例,并确定了用户名和密码,因为我可以通过云控制台连接到数据库。我参考了互联网上的许多教程,但无法找到方法....
var con = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '1234',
database: 'test'
});
con.connect(function(error){
if(error){
console.log('error');
}
else{
console.log('connected');
}
});
解决方案
由于此问题带有 标记google-app-engine
,因此我假设它是您用于部署应用程序的产品。在这种情况下:
App Engine 使用 Unix 套接字连接到 Cloud SQL 实例,因此您需要传递实例的连接名称,如下例所示:
var con = mysql.createConnection({
host: "localhost",
socketPath: "/cloudsql/<PROJECT_ID>:<REGION>:<SQL_INSTANCE_NAME>",
user: "root",
password: "secret"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
您实际上可以通过在本地运行 cloud_sql_proxy 并通过 unix 套接字连接来测试它。使用Cloud SQL for MySQL教程介绍了如何执行此操作。
编辑:
如果您使用的是 App Engine Flex,在您的app.yaml上设置正确的 beta_settings 也很重要,如下例所示:
beta_settings:
# The connection name of your instance, available by using
# 'gcloud beta sql instances describe [INSTANCE_NAME]' or from
# the Instance details page in the Google Cloud Platform Console.
cloud_sql_instances: YOUR_INSTANCE_CONNECTION_NAME
推荐阅读
- firebase - Firebase 身份验证错误密码限制
- visual-studio-code - 如何解决这个颤振仿真问题?
- javascript - React - 打印按钮不适用于所有计算机
- git - Git 代理设置以纯文本形式传递的凭据 - 安全风险问题
- php - 仅插入数据库条件为假并更新为真
- java - 我正在寻找比 4 个 for 循环更快地循环 2 个 2d 数组的方法
- c++ - 指向重载成员函数的指针的 C++ 模板参数推导
- sql - 如果a的列具有以下值“A,b,c,a,c”,如何仅选择列示例中不重复的值,我必须只选择b
- angular - Angular 组件中材料设计颜色属性的继承
- ajax - 如何在ajax调用中连接圆括号中的两个变量