javascript - Node js与mysql模块连接握手错误

标签 javascript mysql node.js express

我一直在尝试在 js 中处理这些困惑的库,我已经使用 Codeigniter 多年了,现在我开始需要在 Node 中使用 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)
        })

最佳答案

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

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

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

关于javascript - Node js与mysql模块连接握手错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51650251/

相关文章:

php - 当用户使用 PHP PDO 和 MySQL 插入带引号的字符串时如何避免斜杠?

当列中的值以php中的相同字符串开头时,mysql查询从表中选择不同的行

javascript - 不要在 jQuery fadeOut() 之后重新定位剩余元素

javascript - jquery 2.2 serializeArray() 在 Firefox、Chrome 中工作,但在 IE 中不起作用(11)

javascript - 尝试 console.log $scope 变量时读取未定义

node.js - Node puppeteer 截图整页 SPA

android - Firebase 云消息传递通知 key 名称

javascript - 在 JavaScript 中调用另一个函数内的函数

mysql - 连接值时,SQL 返回数组字而不是值

javascript - Node 永远说程序正在运行,但证据表明没有