NodeJS 应用程序中的 Google Cloud SQL 连接 (Express) --> 错误:连接 ENOENT



我正在尝试在谷歌云服务上部署我的 NodeJS 应用程序并收到以下错误,我尝试通过 localhost/8080 使用 Postman 调用数据库查询,这是我的服务器正在侦听的地方:connect ENOENT /cloudsql/<MY_CONNECTION_NAME>.这是我的数据库连接文件,config.js


const mysql = require('mysql');
const dotenv = require('dotenv');
dotenv.config();
const {
DB_PASS,
DB_USER,
DB_NAME,
} = process.env;
const config = {
user: DB_USER,
password: DB_PASS,
database: DB_NAME,
socketPath: `/cloudsql/${process.env.CLOUD_SQL_CONNECTION_NAME}`,
};
const connection = mysql.createConnection(config);
// create connection
connection.connect((err) => {
if (err) throw err;
console.log(`Connected to database ${DB_NAME}`);
});
module.exports.connection = connection;

我知道 Google 建议使用池进行连接,但我担心这样做需要我重写所有数据库查询,而且我的截止日期很紧。

我已经能够使用终端使用 MYSQL 成功壳入数据库。

查看连接到 App Engine 页面。特别是,如果套接字不存在,您应该检查以下一些事项:

  1. 对于 GAE Flex,请确保您app.yaml中有以下内容:
beta_settings:
cloud_sql_instances: <INSTANCE_CONNECTION_NAME>
  1. 确保已启用 SQL 管理 API,并确保您具有正确的 IAM 权限 (Cloud SQL Client1 or higher) on your service account (service-PROJECT_NUMBER@gae-api-prod.google.com.iam.gserviceaccount.com'(。如果在项目之间,请确保您有

  2. 确保拼写正确<INSTANCE_CONNECTION_NAME>。它应采用<PROJECT>:<REGION>:<INSTANCE>格式 - 您可以从实例的"实例详细信息"页面完全复制它。

此外,使用连接池不会影响您的查询。使用池仅意味着当您"打开"连接时,它实际上是在重用现有连接,而当您"关闭"连接时,它会将其放回池中,供应用程序在其他地方使用。使用池执行的查询应完全相同。

如果您使用 flex 作为 envapp.yaml运行而没有错误地运行,则会发生这种情况 从app.yaml中删除env:flex, 您的 app.yaml 需要如下所示 app.yaml

您将成功连接到云 SQL,而不会导致错误 控制台日志

相关内容

  • 没有找到相关文章

最新更新