Ошибка рукопожатия при подключении модуля js и mysql

0

Я пытался использовать этот беспорядок в 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)
        })
Теги:
express

1 ответ

0
Лучший ответ
return adapter.close().then( () => {throw err})

Даже если он правильно закрыт, вы делаете ошибку. Сначала напечатайте сообщение об ошибке, чтобы проверить, является ли это причиной.

Примечание. Лучше использовать соединение пула при подключении и выпуске после каждого запроса. Это избавит вас от необходимости создавать и удалять соединение и ускорять работу запросов. CI в php внутренне управляет этим.

  • 0
    Да, я собирался ответить здесь, я исправил это с помощью пула

Ещё вопросы

Сообщество Overcoder
Наверх
Меню