节点js和mysql模块连接握手错误

时间:2018-08-02 09:35:04

标签: javascript mysql node.js express

我一直在尝试让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)
        })

1 个答案:

答案 0 :(得分:0)

return adapter.close().then( () => {throw err})

即使它正确关闭,您也会抛出错误。首先成功打印一些错误消息,检查是否是原因。

注意:每次查询后,最好在连接和释放时使用池连接。它将节省创建和删除连接的开销,并使查询工作更快。 php中的CI在内部进行管理。