Добрый день. Столкнулся с такой проблемой. Есть условие, если в базе данных уже существует такой идентификатор, то мы обновим имя в этой строке. Если такого идентификатора нет, то мы добавим идентификатор и имя. Я смог это реализовать, но когда я начал тестировать и заходить и выходить из аккаунта у меня постоянно выскакивала ошибка ( Подключение к базе данных закрыто ). Я понял, что тут не обойтись без асинхронности запросов, начал разбираться в Promise, но проблема осталась. Не могу найти хорошую документацию по Промисам или какое-либо видео. Могли бы вы подсказать как это можно реализовать и где ошибки или подсказать хороший источник по промисам для Express.js. За исключением Metanit, я прочитал статью про pool, но на свой вопрос так и не смог найти ответ.
Вот, что получилось у меня набросать для того, чтобы вообще это сделать.
// pool.query('SELECT * FROM users WHERE vkontakteid = ?', [req.user.id])
// console.log('Подключение к бд успешно, условие выполнено')
// results.length === 0
// const data = [req.user.id, req.user.displayName]
// pool.execute('INSERT INTO users (vkontakteid, name) VALUES (?,?)', data)
// console.log('Данные добавлены')
// const data = [req.user.displayName, req.user.id];
// pool.execute('`UPDATE users SET name=? WHERE vkontakteid=?`', data)
// console.log('Данные обновлены')
Тут я попробовал всё это преобразовать в нормальный код, но это условие у меня вообще не проверяется
if (result.lenght === 0)
И автоматически выводится сразу же else
pool.query('SELECT * FROM users WHERE vkontakteid = ?', [req.user.id], console.log('Подключение к бд успешно, условие выполнено'))
.then(result => {
if (result.lenght === 0) {
const data = [req.user.id, req.user.displayName]
return pool.execute('INSERT INTO users (vkontakteid, name) VALUES (?,?)', data, console.log('Данные добавлены'))
} else {
const data = [req.user.displayName, req.user.id];
return pool.execute('UPDATE users SET name=? WHERE vkontakteid=?', data, console.log('Данные обновлены'))
}
})
.then(result => {
console.log(result[0]);
pool.end();
})
.then(() => {
console.log("пул закрыт");
})
.catch(function(err) {
console.log(err.message);
});
И опять же ошибка из-за которой я начал всем этим заниматься.
( Я просто вхожу в аккаунт, потом выхожу и снова вхожу, и эта ошибка появляется )
Я понимаю, почему она появляется, но я уже многое перепробовал и не знаю, что ещё можно попробовать.