Foros del Web » Programando para Internet » Node.js »

Valor de Consulta MySQL

Estas en el tema de Valor de Consulta MySQL en el foro de Node.js en Foros del Web. Cordial Saludo a todos y gracias por su tiempo. Tengo un socket en Node.JS y que se conecta con una base de datos MySQL. El ...
  #1 (permalink)  
Antiguo 27/03/2014, 19:04
 
Fecha de Ingreso: junio-2011
Ubicación: Medellín
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 0
Valor de Consulta MySQL

Cordial Saludo a todos y gracias por su tiempo.

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
  1. var net = require('net');
  2. var mysql = require('mysql');
  3.     console.log("Conectado al Servidor");
  4.     console.log("Socket Escuchando");
  5.     var server = net.createServer(function(socket) {
  6.     console.log("Conectado - Escuchando");
  7.     socket.on('data', function (data) {
  8.         function handleDisconnect(callback) {
  9.             var conexion = mysql.createConnection({
  10.                 host     : '127.0.0.1',
  11.                 user     : 'root',
  12.                 password : '',
  13.                 database : 'dbproduccion_piloto'
  14.             });
  15.             conexion.connect(function(err) {
  16.                 if(err) {
  17.                     console.log('error when connecting to db:', err);
  18.                     //setTimeout(handleDisconnect, 2000);
  19.                 }
  20.             });
  21.             conexion.on('error', function(err) {
  22.                 console.log('db error', err);
  23.                 if(err.code === 'PROTOCOL_CONNECTION_LOST') {
  24.                     console.log('error when connecting to db:', err);
  25.                     handleDisconnect();
  26.                 }
  27.                 else {
  28.                     throw err;
  29.                 }
  30.             });
  31.             var datosin = String(data);
  32.             var cod_peticion = datosin.substr(0,4);
  33.             var placa = datosin.substr(4,7);
  34.             switch(cod_peticion) {
  35.                         case "2020":
  36.                             //EN ESTA PARTE SE REALIZA UNA ENTRADA INSERT QUE TRABAJA BIEN
  37.                             break;
  38.                         case "2021":
  39.                            //EN ESTA PARTE SE REALIZA UNA ENTRADA INSERT QUE TRABAJA BIEN
  40.                             break;
  41.                         case "2022":
  42.                             var latitud_final = datosin.substr(11,9);
  43.                             var nsf = datosin.substr(20,1);
  44.                             var longitud_final = datosin.substr(21,10);
  45.                             var ewf = datosin.substr(31,1);
  46.                             var lasttt = datosin.substr(32,4);
  47.                            //--------------------------------------------------------
  48.                            var id;
  49.                             conexion.query('SELECT Id_Recorrido FROM recorridos WHERE Placa="'+placa+'" ORDER BY Id_Recorrido DESC LIMIT 0,1',function (results, rows) {
  50.                                 id = rows[0].Id_Recorrido;
  51.                                 console.log('Id adentro: '+id);  //ACÁ SE MUESTRA EL VALOR CORRECTO DEL ID EN LA CONSULTA
  52.                                 callback(id);
  53.                                 return id;
  54.                             });
  55.                             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
  56.                             //--------------------------------------------------------------
  57.                             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+'"';          
  58.                             var respuesta = "ready 2022";
  59.                             break;
  60.                         default:
  61.                             socket.write("coderror");
  62.                 }
  63.                  conexion.query(querydb,function selectUsuario(err, results, fields) {
  64.                       if (err) {
  65.                           socket.write("Error al conectar a la bd");
  66.                           console.log('error when connecting to db:', err);
  67.                           //throw err;
  68.                       }
  69.                      else {
  70.                           socket.write(respuesta);
  71.                       }
  72.                   });
  73.             conexion.end();
  74.         }
  75.         handleDisconnect();
  76.     });
  77. }).listen(12000);

Última edición por gaedcu; 28/03/2014 a las 19:12 Razón: Corregir
  #2 (permalink)  
Antiguo 31/03/2014, 15:05
Avatar de vick90  
Fecha de Ingreso: abril-2010
Mensajes: 144
Antigüedad: 14 años
Puntos: 14
Respuesta: Valor de Consulta MySQL

Mira siempre te va a devolver undefined, la verdad no se porque pasa yo pienso que tiene que ver con el scope o closure, yo tuve un problema parecido con mongoDB lo que hize para resolverlo es crear un funcion que me devolvia el resultado en forma de objeto asi.

Código Javascript:
Ver original
  1. function x() {
  2.    return {
  3.                res: conexion.query('SELECT Id_Recorrido FROM recorridos WHERE Placa="'+placa+'" ORDER BY Id_Recorrido DESC LIMIT 0,1')
  4. }

y en otra parte hago uso del resultado devuelto, de la sig manera
Código Javascript:
Ver original
  1. var y = x();
  2. //Recuperar todos los mensajes
  3. y.res.toArray(function(err,res) {
  4.    console.log(res);
  5. }
Espero te auyude en algo
Saludos
  #3 (permalink)  
Antiguo 01/04/2014, 17:25
 
Fecha de Ingreso: junio-2011
Ubicación: Medellín
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Valor de Consulta MySQL

Muchas Gracias Vick90 por tu respuesta. El toArray no lo puedo usar porque no estoy trabajando con MongoDB sino con MySQL. Intenté de otra forma y ahora me entrega el [object Object], y cuando creo una función para pasarlo a texto de nuevo me entrega undefined. Esta paquete de MySQL para Node creo que no me va gustando, porque nisiquiera puedo usar el valor de una consulta...

Etiquetas: mysql, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:55.