El nodo Mysql no puede poner en cola una consulta después de llamar a salir

¿Dónde cierro la conexión mysql?

Necesito ejecutar consultas en secuencia. Estoy escribiendo un código que se ve así en este momento:

var sqlFindMobile = "select * from user_mobiles where mobile=?"; var sqlNewUser = "insert into users (password) values (?)"; //var sqlUserId = "select last_insert_id() as user_id"; var sqlNewMobile = "insert into user_mobiles (user_id, mobile) values (?,?)"; connection.connect(function(err){}); var query = connection.query(sqlFindMobile, [req.body.mobile], function(err, results) { if(err) throw err; console.log("mobile query"); if(results.length==0) { var query = connection.query(sqlNewUser, [req.body.password], function(err, results) { if(err) throw err; console.log("added user"); var user_id = results.insertId; var query = connection.query(sqlNewMobile, [user_id, req.body.mobile], function(err, results) { if(err) throw err; console.log("added mobile"); //connection.end(); }); }); } }); //connection.end(); 

(Soy un principiante con node, npmexpress y npm-mysql. He intentado buscar SO para que “express mysql no pueda encolarse” para encontrar preguntas relacionadas y no las haya encontrado).

Solucioné este problema utilizando este método.

connection.end () en su función connection.query

El código fijo está here

Si está utilizando el módulo node-mysql por felixge , puede llamar a connection.end () en cualquier momento después de haber realizado todas las llamadas a connection.query (), ya que esperará a que todas las consultas terminen. Antes de que termine la conexión.

Vea el ejemplo aquí para más información.

Si desea ejecutar muchas consultas en serie, debe buscar en el módulo asíncrono , es ideal para tratar una serie de funciones asíncronas (es decir, aquellas que tienen una callback).

Quizás el problema es que la consulta mySQL se ejecuta después de que la conexión ya está cerrada, debido a la naturaleza asíncrona de Node. Intente usar este código para llamar a connection.end () justo antes de que salga el hilo:

 function exitHandler(options, err) { connection.end(); if (options.cleanup) console.log('clean'); if (err) console.log(err.stack); if (options.exit) process.exit(); } //do something when app is closing process.on('exit', exitHandler.bind(null, {cleanup: true})); 

Código adaptado de @Emil Condrea, realizando una acción de limpieza justo antes de que node.js salga

En mi caso, se llamó a connection.end en un lugar que era difícil de notar, por lo que una llamada errante a connection.end podría ser el problema con este error