NodeJS 如何使用sequelize连接到云SQL MySQL示例?错误:隔离连接错误:连接ENOENT

hmmo2u0o  于 2023-02-12  发布在  Node.js
关注(0)|答案(1)|浏览(121)

我正在尝试从我的Nodejs服务器连接到我的数据库,如下所示:

const db = new Sequelize(sql.database, sql.username, sql.password, sql.config);

const connectDB = async () => {
  try {
    await db.authenticate();
    logger.info(`MySQL DB Connected: ${sql.config.host}`)
  } catch (error) {
    logger.error(`Error: ${error}`);
    process.exit(1)
  }
}

我的配置如下所示:

const sql = {
 database: process.env.SQL_DATABASE as string,
  username: process.env.SQL_USER as string,
  password: process.env.SQL_PASSWORD,
  config: {
    dialect: "mysql" as Dialect,
    host: "/cloudsql/{instance}" as string,
    dialectOptions: {
      socketPath: "/cloudsql/{instance}",
    },
  },
};

但是,我得到了一个sequelizeconnectionerror: connect ENOENT
在GCP中连接到我的Cloud SQL示例时,我是否遗漏了什么?

wgx48brx

wgx48brx1#

sql.config对象缺少用于访问数据库的“port”键。MySql中的默认端口为3306。
根据您的数据库设置,您还应该添加ssl配置选项。
如果你有SSL设置,你可以通过添加一个键“ssl”到你的dialentOptions,用一个包含“key”,“ca”和“cert”的对象传递适当的证书给它们。
您的代码将如下所示:

const sql = {
  database: process.env.SQL_DATABASE as string,
  username: process.env.SQL_USER as string,
  password: process.env.SQL_PASSWORD,
  config: {
    dialect: "mysql" as Dialect,
    host: "/cloudsql/{instance}" as string,
    port: process.env.SQL_PORT,
    dialectOptions: {
      socketPath: "/cloudsql/{instance}",
      ssl: {
        key: process.env.SQL_KEY,
        ca: process.env.SQL_CA,
        cert: process.env.SQL_CERT
      }
    },
  },
};

相关问题