Sequelize не может получить доступ к облачному SQL GCP

#node.js #sequelize.js #google-cloud-sql

# #node.js #sequelize.js #google-cloud-sql

Вопрос:

У меня есть экземпляр Google cloud SQL, и я хочу иметь доступ к нему из своего node.js приложение, запущенное локально на моем компьютере.

Я включил доступ к экземпляру Cloud SQL через общедоступный IP-адрес и создал сеть на GCP с IP-адресом моего локального компьютера, и я протестировал соединение несколькими способами:

  1. MySQL Workbench
  2. терминал
  3. Из моего приложения NodeJS, работающего локально, используя mysql2 для подключения

Все вышеупомянутые способы успешно подключены, и я могу работать с моим экземпляром cloud SQL, как и ожидалось, проблема заключается в том, что при попытке разрешить моему приложению NodeJS подключаться с помощью sequelize я вижу эту ошибку

 UnhandledPromiseRejectionWarning: SequelizeAccessDeniedError: Access denied for user 'root'@'localhost' (using password: YES)
 

это мой код подключения:

     host: 'XXX.XX.XX.XX',
    port: "",
    user: "root",
    password: 'password',
    database: "DB_NAME",
    dialect: "mysql",
    pool: {
            max: 5,
            min: 0,
            acquire: 30000,
            idle: 10000
        }
   
    const db = {};              
    const connection = await mysql.createConnection({ host, port, user, password });
    await connection.query(`CREATE DATABASE IF NOT EXISTS `${database}`;`);
    const sequelize = new Sequelize(database, user, password, { dialect: dialect });
    
    db.Sequelize = Sequelize;
    db.sequelize = sequelize;
    
    // // init models and add them to the exported db object
    db.orders = require("../../models/order.model.js")(sequelize, Sequelize);
         
    db.sequelize.sync().then(function(){
              console.log('DB connection sucessful.');
            }, function(err){
              // catch error here
            
            });
 

Комментарии:

1. Вы пытаетесь подключиться к localhost от имени root. Включите код, который устанавливает соединение.

2. Я обновил вопрос, а также исправил проблему, sequelize ожидает, что я передам ему хост. Недостаточно передать хост для подключения к mysql, и он работал ранее, поскольку, похоже, имеет значение localhost по умолчанию, когда хост явно не передан sequelize

Ответ №1:

Кажется, я должен передать хост, поскольку каким-то образом он рассматривал host как localhost, когда он явно не указан

Итак, это:

     const sequelize = new Sequelize(database, user, password, { dialect: dialect });
 

Должен быть обновлен до этого:

     const sequelize = new Sequelize(database, user, password, { host: host, dialect: dialect });