Tengo un socket en Node.JS y que se conecta con una base de datos MySQL. El socket y las consultas MySQL trabajan muy bien, el problema está en el valor recuperado por la consulta SELECT. Este valor lo necesito para hacer unas actualizaciones UPDATE. Dentro de la función de la query el valor es el correcto, pero por fuera de ella es undefined. les dejaré el código para que se guíen. Agradezco inmensamente a las personas que me puedan ayudar.
PD: el problema está en la parte del código en el case 2022 entre las lineas.
Código:
Código Javascript:Ver original
var net = require('net'); var mysql = require('mysql'); console.log("Conectado al Servidor"); console.log("Socket Escuchando"); var server = net.createServer(function(socket) { console.log("Conectado - Escuchando"); socket.on('data', function (data) { function handleDisconnect(callback) { var conexion = mysql.createConnection({ host : '127.0.0.1', user : 'root', password : '', database : 'dbproduccion_piloto' }); conexion.connect(function(err) { if(err) { console.log('error when connecting to db:', err); //setTimeout(handleDisconnect, 2000); } }); conexion.on('error', function(err) { console.log('db error', err); if(err.code === 'PROTOCOL_CONNECTION_LOST') { console.log('error when connecting to db:', err); handleDisconnect(); } else { throw err; } }); var datosin = String(data); var cod_peticion = datosin.substr(0,4); var placa = datosin.substr(4,7); switch(cod_peticion) { case "2020": //EN ESTA PARTE SE REALIZA UNA ENTRADA INSERT QUE TRABAJA BIEN break; case "2021": //EN ESTA PARTE SE REALIZA UNA ENTRADA INSERT QUE TRABAJA BIEN break; case "2022": var latitud_final = datosin.substr(11,9); var nsf = datosin.substr(20,1); var longitud_final = datosin.substr(21,10); var ewf = datosin.substr(31,1); var lasttt = datosin.substr(32,4); //-------------------------------------------------------- var id; conexion.query('SELECT Id_Recorrido FROM recorridos WHERE Placa="'+placa+'" ORDER BY Id_Recorrido DESC LIMIT 0,1',function (results, rows) { id = rows[0].Id_Recorrido; console.log('Id adentro: '+id); //ACÁ SE MUESTRA EL VALOR CORRECTO DEL ID EN LA CONSULTA callback(id); return id; }); console.log('Id afuera: '+id); //ACÁ SE MUESTRA EL VALOR EQUIVOCADO UNDEFINED, DESPUÉS DE HABER REALIZADO LA CONSULTA POR LO QUE NO REALIZA EL UPDATE //-------------------------------------------------------------- var querydb = 'UPDATE recorridos SET Latitud_Final="'+latitud_final+'", N_S_F="'+nsf+'", Longitud_Final="'+longitud_final+'", E_W_F="'+ewf+'", LastTT="'+lasttt+'" WHERE Id_Recorrido="'+id+'"'; var respuesta = "ready 2022"; break; default: socket.write("coderror"); } conexion.query(querydb,function selectUsuario(err, results, fields) { if (err) { socket.write("Error al conectar a la bd"); console.log('error when connecting to db:', err); //throw err; } else { socket.write(respuesta); } }); conexion.end(); } handleDisconnect(); }); }).listen(12000);