Не подключается к базе данных mysql, когда сайт открывается через телеграмм мини приложение

Я столкнулся с такой проблемой, что когда я захожу на сайт через свой браузер, все работает отлично и подключается к базе данных, но когда я захожу через телеграмм мини приложение то выходит ошибка подключения к базе данных

серверная часть кода bot.js:

import TelegramBot from "node-telegram-bot-api";
import express from "express";
import useragent from "express-useragent";
import mysql from "mysql2";

const token = "token";
const webAppUrl = "webAppUrl";
const bot = new TelegramBot(token, { polling: true });
import cors from 'cors';
const app = express();

// Настройка CORS
app.use(cors({
  origin: '*', // Разрешает запросы с любого домена
  methods: ['GET', 'POST'], // Разрешенные методы
  allowedHeaders: ['Content-Type'] // Разрешенные заголовки
}));

app.use(express.json()); // Парсинг JSON данных
app.use(useragent.express());

// Подключение к MySQL базе данных
const db = mysql.createConnection({
  host: "host",
  port: port,
  user: 'user',
  password: 'pass',
  database: 'db'
});

// Подключение к базе данных
db.connect((err) => {
  if (err) {
    throw err;
  }
  console.log('MySQL connected');
});

// Обработчик команды /start
bot.onText(/\/start/, (msg, match) => {
  const chatId = msg.chat.id;
  const userId = msg.from.id.toString();
  const username = msg.from.username ? msg.from.username : 'пользователь';

  // Проверяем наличие пользователя в базе данных по ID
  let sql = 'SELECT * FROM users WHERE ID = ?';
  db.query(sql, [userId], (err, result) => {
    if (err) {
      throw err;
    }
    if (result.length === 0) {
      // Создаем новую запись, если пользователя нет в базе данных
      sql = 'INSERT INTO db (ID, username) VALUES (?, ?)';
    } else {
      // Обновляем username, если пользователь уже существует
      sql = 'UPDATE db SET username = ? WHERE ID = ?';
      db.query(sql, [username, userId], (err, result) => {
        if (err) {
          throw err;
        }
      });
    }

    // Получаем данные пользователя
    sql = 'SELECT * FROM users WHERE ID = ?';
    db.query(sql, [userId], (err, result) => {
      if (err) {
        throw err;
      }
      const userData = result[0];

      // Создаем ссылку с параметрами
      const userParams = `?id=${userData.ID}`;
      const userWebAppUrl = `${webAppUrl}${userParams}`;
      console.log(`${webAppUrl}${userParams}`);

      // Отправляем приветственное сообщение
      const welcomeMessage = 
        'Hello';
      const replyMarkup = {
        inline_keyboard: [
          [
            {
              text: "WebApp",
              web_app: { url: `${userWebAppUrl}` },
            },
          ]
        ],
      };

      bot.sendMessage(chatId, welcomeMessage, {
        reply_markup: replyMarkup,
      });
    });
  });
});

// Обработчик маршрута /getData
app.get('/getData', (req, res) => {
  const userId = req.query.userId;

  if (!userId) {
    return res.status(400).json({ message: 'User ID is required' });
  }

  // Получаем данные пользователя из базы данных
  let sql = `SELECT * FROM users WHERE ID = ?`;
  db.query(sql, [userId], (err, result) => {
    if (err) {
      console.error('Ошибка при выполнении запроса:', err);
      return res.status(500).json({ message: 'Ошибка при получении данных пользователя' });
    }
    if (result.length === 0) {
      return res.status(404).json({ message: 'User not found' });
    }
    res.json(result[0]);
  });
});

вот код main.js:

const body = document.body;
const image = body.querySelector('#coin');
const h1 = body.querySelector('h1');    
// Получаем параметры из URL
const urlParams = new URLSearchParams(window.location.search);
const user = urlParams.get('id');
const baseUrl = 'http://localhost:3000';
let userId = localStorage.getItem('userId');
if (userId === null) {
    localStorage.setItem('userId', `${user}`);
    userId = `${user}`;
}
console.log(`${userId}`)

// Функция для установки значений по умолчанию
function setDefaultValues() {
    fetch(`${baseUrl}/getData?userId=${userId}`, {
        method: 'GET',
        headers: {
            'Content-Type': 'application/json'
        }
    })
    .then(response => {
        if (!response.ok) {
            throw new Error(`Ошибка HTTP: ${response.status}`);
        }
        return response.json();
    })
    .then(data => {
        let username = localStorage.getItem('username');

        // Проверка и установка значений в localStorage, если они отсутствуют
        if (username === null) {
            localStorage.setItem('username', data.username);
            username = data.username;
        }    
        // Обновление значений на странице
        const h1 = document.querySelector('h1'); // Обновите селектор для выбора нужного элемента
        if (h1) {
            h1.textContent = username.toLocaleString();
        }

        console.log('Данные успешно сохранены в localStorage');
    })
    .catch((error) => {
        console.error('Ошибка при получении данных с сервера:', error);
    });
}

почему именно при запуске через telegram mini app выходит ошибка и как можно это исправить? база данных находится на удаленном сервере vps


Ответы (0 шт):