我试图在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到数据库中。
看一下连接到应用引擎页面。特别是,如果套接字不存在,您应该检查以下一些内容:
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而不会导致错误控制台日志