Сегодня весь вечер пытался решить дурацкую проблему с закрытием соединения. Есть функция, которая запускается через setInterval (код будет ниже). И в этой функции каждый раз создается подключение к БД и закрывается. Но это так должно быть. На деле если добавлять в конец функции con.end(), то при следующем подключении выдает:
Error: Cannot enqueue Query after invoking quit.
Если не закрывать подключение то в следующий раз оно просто скажет:
Error: Cannot enqueue Handshake after already enqueuing a Handshake.
Все бы ничего, я не дурак (вроде) и пытался сделать весь этот setTimeout внутри большого подключения, которое происходило бы после запуска файла, да вот только у меня timeout на 10 минут и оно дает ошибку о том, что долгое время подключения (пример не приведу, тк придется переделать код обратно).
У меня есть мысли с .then, после куска con.connect, но не получилось, и я решил не делать костыли, и просто спросить.
Было бы замечательно узнать в чем дело, ведь в этой теме я новенький.
Кусок кода с сервера:
let bodyOld = '';
const sendReq = () => {
// send request to gitHub
const request = https.request(options, res => {
// get all request data from git and put it in 'body'
let body = '';
res.on('data', chunk => {
body += chunk;
});
// if we have new data ( != data from DB )
if (bodyOld != JSON.stringify(body)) {
// bodyOld = JSON.stringify(body);
// connect to mysql
con.connect(err => {
if (err) {
console.log('Error ' + err)
} else {
// dell all old data in DB
let sql = "DELETE FROM info";
con.query(sql, (err, result) => {
err ? console.log('Error ' + err) :
console.log("All old data was deleted.");
})
// parce data and put in DB
res.on('end', () => {
body = JSON.parse(body);
body.forEach(repo => {
let sql = "INSERT INTO info (name, url, description, language, create_at, last_update, size) VALUES ('" +
repo.name + "', '" + repo.html_url + "', '" + repo.description + "', '" + repo.language + "', '" +
repo.created_at.substring(0, 10) + "', '" + repo.updated_at.substring(0, 10) + "', '" + repo.size + "')";
con.query(sql, (err, result) => {
err ? console.log('Error ' + err) :
console.log("One new record.");
})
})
})
}
})
// con.end();
}else{
console.log('It alreadey update.');
request.end();
return;
}
})
// check err
request.on('error', e => {
console.error('Error is: ' + e);
});
request.end();
}
// setInterval every 10 minutes
setInterval(sendReq, 600);
Я нашел решение этой проблемы через mysql.createPool.
Создаем пулл:
// connect ot mysql data for PC
const optionsMysql = {
host: "localhost",
user: "root",
password: "",
database: 'guthub_proj'
}
const pool = mysql.createPool(optionsMysql)
Теперь при каждом запросе можно просто вытягивать из пула соединение:
pool.getConnection(function(err, con) {
//code here...
}
На сколько я понял его можно не закрывать. И это то что мне было нужно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Учусь конвертировать csv файлы в формат json на php(который тоже знаю не очень), большая просьба помочь с алгоритмоместь следующий csv фрагмент...
Есть простая форма с двумя полями: телефон и emailНужно автоматически отправлять файл на почту, которую укажет пользователь в поле email