提问者:小点点

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


我试图在Google Cloud services上部署我的NodeJS应用程序,当我试图通过LocalHost/8080使用Postman调用数据库查询时,得到以下错误:connect ENOENT/cloudSQL/。下面是我的数据库连接文件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 shell到数据库中。


共2个答案

匿名用户

看一下连接到应用引擎页面。特别是,如果套接字不存在,您应该检查以下一些内容:

  1. 对于GAE Flex,请确保您的app.yaml中包含以下内容:
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>

确保已启用SQL管理API,并确保您对服务帐户(service-project_number@gae-api-prod.google.com.IAM.gserviceAccount.com`)具有正确的IAM权限(Cloud SQL Client1或更高版本)。如果在项目之间,请确保您有

请确保的拼写正确。它的格式应该是::-您可以从实例的“实例详细信息”页面中完全复制它。

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

匿名用户

如果您在app.yaml中使用flex作为env来运行而没有错误,则会发生这种情况。从app.yaml中删除env:flex时,您的app.yaml需要与此app.yaml类似

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