我一直在尝试让js中的此类库工作,我已经使用Codeigniter多年了,现在我开始需要在节点中使用mysql,但是由于连接很麻烦而且非常棘手是我的主要问题。
所以我正在制作一个适配器以进行基本操作并使用或不使用promise,在进行第一个查询后它仍然给我这个错误。
"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)
})
答案 0 :(得分:0)
return adapter.close().then( () => {throw err})
即使它正确关闭,您也会抛出错误。首先成功打印一些错误消息,检查是否是原因。
注意:每次查询后,最好在连接和释放时使用池连接。它将节省创建和删除连接的开销,并使查询工作更快。 php中的CI在内部进行管理。