Проблема с подключением для MySQL 8.0 и Node JS с использованием Express

Я пытался извлечь информацию из таблицы MySQL 8.0 в Node JS, используя Express. Но я постоянно получаю сообщение об ошибке ER_NOT_SUPPORTED_AUTH_MODE. Я пробовал много вещей, таких как:

  1. Изменение метода проверки подлинности для отдельного пользователя (и использования нескольких разных пользователей) - изменилось с SHA 256 на Caching 256 и на значение по умолчанию (mysql_native_password), ни один из них не работает.
  2. Изменение моего кода Node js: вместо того, чтобы использовать единственное соединение, которое давало мне ошибку - PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR, я изменил его на пул соединения, но все еще получаю ошибку ER_NOT_SUPPORTED_AUTH_METHOD.

Я обнаружил, что MySQL Server использует закрытый ключ пароля SHA 256 и открытый ключ, но я не знаю, как реализовать это или использовать его в Node. JS.

Моя таблица базы данных: Reaction_test

product_id | название продукта | product_price 1 | abc | 10

Вот мой код Node. js:

const express = require('express');
const cors = require('cors');
const mysql = require('mysql');
const app = express();

const SELECT_ALL_QUERY = 'SELECT * FROM project.react_test';

const connection = mysql.createConnection({
  host:'localhost',
  user:'avd',
  password:'password',
  database:'project',
  insecureAuth : true
});

const pool  = mysql.createPool({
  host            : 'localhost',
  user            : 'avd',
  password        : 'password',
  authentication_string : 'root',
  insecureAuth : true
});

//var pool = mysql.createPool(connection);

connection.connect(err => {
  if(err) {
    return err;
  }
})

console.log(connection);
app.use(cors());
app.get('/', (req,res) => {
  res.send('hello from product server')
});

app.get('/hola', (req,res) => {
  res.send('hola')
});

app.get('/hotels_info', (req,res) => {
  connection.query(SELECT_ALL_QUERY, (err, results) => {
    if(err){
      return res.send(err)
    } else {
      return res.json({
        data: results
      })
    }
  });
});

app.listen(4000, () => {
console.log('Product server listining port 4000');
});

Ошибка при использовании одного соединения: {"code":"PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR","fatal":false}

Ошибка при использовании пула соединения: {"code":"ER_NOT_SUPPORTED_AUTH_MODE","errno":1251,"sqlMessage":"Клиент не поддерживает протокол аутентификации, запрошенный сервером; рассмотрите возможность обновления клиента MySQL","sqlState":"08004","роковой": правда}

Я не знаю, что делать дальше! Пожалуйста, ведите меня! Заранее спасибо!

0 ответов

Другие вопросы по тегам