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

标签 mysql sql node.js google-app-engine google-cloud-sql

我正在尝试在 Google Cloud 服务上部署我的 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 进入数据库。

最佳答案

看看Connecting to App Engine页。特别是,如果套接字不存在,您应该检查以下一些内容:

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

  • 确保您的拼写是 <INSTANCE_CONNECTION_NAME>正确。其格式应为 <PROJECT>:<REGION>:<INSTANCE> - 您可以从实例的“实例详细信息”页面准确复制它。

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

    关于mysql - NodeJS 应用程序 (Express) 中的 Google Cloud SQL 连接 --> 错误 : connect ENOENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59584987/

    相关文章:

    php - 使用php将数据输入mysql数据库

    php - MYSQL IF 语句按类别重新排序

    sql - 如何在雪花中将日期截断为每月的第一天?

    php - echo 允许空值的日期变量的 fatal error

    javascript - Ubuntu : Chilld process with piped stdio, 上的 Node.js 不发出标准输出和标准错误

    php - 如何将子查询的所有结果包含到 SELECT 语句中?

    mysql - 下一组序号 mysql

    php - 如何在mysql中显示多个表列表

    javascript - Nodejs 模块在不同设备中无法按预期工作

    python - 子进程 : stdin not getting read by Python readline