Не подключается к базе данных 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