Я пытался использовать этот беспорядок в libs в js, работая с, я использовал Codeigniter в течение многих лет, и теперь я пришел заранее с необходимостью использовать mysql в узле, но это очень беспорядочно и сложно, поскольку соединения являются моими основными проблема.
Поэтому я делаю адаптер для выполнения основных операций и с обещанием или нет, он все равно дает мне эту ошибку после первого запроса.
"Cannot enqueue Quit after invoking quit."
Как правило, мы открываем con, запрашиваем и закрываем, и, делая это, или даже не закрывая его, бросает всегда. Поэтому я сомневаюсь, что я делаю неправильно или что мне нужно добавить?
const mysql = require('mysql')
let con = mysql.createConnection({
host: "XXXXX",
user: "XXX",
password: "XXX",
database: "XXX"
});;
con.on('error', function(err) {
console.log("[mysql error]",err);
});
con.on('close', (err) => {
console.log("Mysql closed connection");
})
/**
* Executes a simple query with a given sql command and notifies when is complete
*
* @param {string} sql
* @param {function} callback
*
* @return {object|json}
*/
executeSimpleQuery = (sql, args) =>
{
return new Promise( (resolve, reject) => {
con.connect( (err) => {
con.query( sql, args, (err, rows) => {
if (err) return reject(err);
resolve(rows);
})
})
})
}
/**
* Closes a connection
*/
close = () =>
{
return new Promise( ( resolve, reject ) => {
con.end( err => {
if ( err )
return reject( err );
resolve();
} );
} );
}
/**
* Executes a simple query with a given sql command and notifies when is complete
*
* @param {string} sql
* @param {function} callback
*
* @return {object|json}
*/
executeSimpleQueryx = (sql, callback) =>
{
if (con.state !== "authenticated")
{
con.connect( (err) => {
if (err) console.log("mysql error - " + err);
console.log("Connection was been established in a simple query");
con.query(sql, (err,result) => {
if (err) throw err;
callback(result);
})
});
}
}
И я вызываю функцию как это
adapter.executeSimpleQuery('SELECT id from Users WHERE email= "${email}" LIMIT 1')
.then( rows => {
console.log("We got row data--");
console.log( JSON.stringify( rows ))
callback(rows[0].id !== "undefined" ? rows[0].id : null)
})
.then( rows => {
console.log("Closing db con..")
return adapter.close()
}, err => {
return adapter.close().then( () => {throw err})
})
.catch( err => {
console.log("EX rasise" + err)
})
return adapter.close().then( () => {throw err})
Даже если он правильно закрыт, вы делаете ошибку. Сначала напечатайте сообщение об ошибке, чтобы проверить, является ли это причиной.
Примечание. Лучше использовать соединение пула при подключении и выпуске после каждого запроса. Это избавит вас от необходимости создавать и удалять соединение и ускорять работу запросов. CI в php внутренне управляет этим.