繁体   English   中英

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

[英]Google Cloud SQL connection in NodeJS app (Express) --> Error: connect ENOENT

我正在尝试在 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 进入数据库。

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

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

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

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

如果您在app.yaml中使用 flex 作为 env 运行而没有错误,则会发生这种情况 从您的app.yaml删除env:flex ,您的 app.yaml 需要看起来像这个app.yaml

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM