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

Problema con NODE.JS y modulo MYSQL varias consultas dentro de un for();

Estas en el tema de Problema con NODE.JS y modulo MYSQL varias consultas dentro de un for(); en el foro de Node.js en Foros del Web. Hola a todos. He avanzado mucho en cuanto al aprendizaje de NODE.JS la verdad es que es una tecnología muy potente y buena para aprender ...
  #1 (permalink)  
Antiguo 24/02/2015, 05:15
 
Fecha de Ingreso: junio-2012
Mensajes: 56
Antigüedad: 12 años, 6 meses
Puntos: 1
Exclamación Problema con NODE.JS y modulo MYSQL varias consultas dentro de un for();

Hola a todos.

He avanzado mucho en cuanto al aprendizaje de NODE.JS la verdad es que es una tecnología muy potente y buena para aprender a usar, pero obviamente no faltan los problemas y acudo a este foro haber si me pueden ayudar.
La idea es la siguiente.

Esto es un chat obviamente se almacena y se muestra todo, nombres/apellidos, nicks, id del usuario, id del chat (sala), avatar.

El problema esta en el cuando el usuario se conecta osea entra a la charla muestre todos los resultados osea el historial que hay de esa sala.
El mecanismo funciona pero el detalle es el siguiente.

Ejemplo: hay 3 mensajes en esta sala.
mensaje 1: de nick1 dice: hola como andan
mensaje 2: de nick2 dice: todo bien y vos
mensaje 3: de nick1 dice: muy bien gracias.

Lo que aparecerá en pantalla tan pronto entre un usuario sera
nick1 dice: muy bien gracias.
nick2 dice: muy bien gracias.
nick1 dice: muy bien gracias.

Siempre toma y muestra el ultimo mensaje, sin embargo los datos que muestra de nick etc... son correctos el único problema es que no desliza por así decirlo son los mensajes.

El razonamiento es este:
1) Leer todas las historias que tenga sobre esta sala
2) Desplazarse por un for() y mostrar todas las historias
--- Hasta acá va bien de bien ---
3) Consultar el nombre y apellido de el usuario dueño de esa historia
4) Consultar el avatar del dueño de la historia
5) Consultar el nick del dueño de la historia.
6) Almacenar todos los datos y pasarlos a otro emit() que es el que muestra todo en pantalla (Funciona bien)
Lo unico que falla son los datos que se obtienen de la primera consulta.

El código es el siguiente. Esto esta dentro de la funcion de socket on('connection')

Código:
connection.query('SELECT * FROM `mensajes_txt` WHERE `mt_idmp`=?', [data], function(error, results){
		if(error){
		  console.log(error.message);
		}else{
			if (results.length  > 0) {
				for(var i=0; i<results.length; ++i){
					var Result = results[i];
					var errorST = 0;

						connection.query('SELECT * FROM `user_nomapp` WHERE `um_iduser`=? LIMIT 1', [Result.mt_user], function(error5, results5){
							if(error5){
							  errorST = 1;
							  var Rname = error5.message;
							}else{
								var Rname = results5[0].um_nombre + " " + results5[0].um_apellido;
								
								connection.query('SELECT * FROM `user_avatar` WHERE `ua_iduser`=? LIMIT 1', [Result.mt_user], function(error6, results6){
									if(error6){
									  errorST = 2;
									  var Ravatar = error6.message;
									}else{
										if (results6.length  == 0) {
											var Ravatar = URLPRIMMARY + "/up/av/anonimo.png";
										}else{
											var Ravatar = results6[0].ua_url1;
										}
										
											connection.query('SELECT * FROM `user_name` WHERE `un_iduser`=? LIMIT 1', [Result.mt_user], function(error7, results7){
												if(error7){
												  errorST = 3;
												  var Rnick = error7.message;
												}else{
													var Rnick = results7[0].un_name;
													
													/* Fin */
													console.log({
															id: Result.mt_idmp,
															lick: Result.mt_user,
															avatar: Ravatar,
															name: Rname,
															nick: Rnick,
															message: Result.mt_txt,
															time: Result.mt_time,
															time1: Result.mt_time,
															time2: Result.mt_time2
														});
													if(errorST != 0){
														switch(errorST){
															case 1:
																console.log(Rname);
															break;
															case 2:
																console.log(Ravatar);
															break;
															case 3:
																console.log(Rnick);
															break;
															default:
																console.log(Rname);
																console.log(Ravatar);
																console.log(Rnick);
															break;
														}
													}else{
														var Result2 = Result.mt_user;
														socket.emit('new message', {
															id: Result.mt_idmp,
															lick: Result.mt_user,
															avatar: Ravatar,
															name: Rname,
															nick: Rnick,
															message: Result.mt_txt,
															time: Result.mt_time,
															time1: Result.mt_time,
															time2: Result.mt_time1
														}, Result2);
													}//If end error
												}
											});
									}
								});
								
							}
						});
				}
			}
		}
	  });//Cierre de la conexion
La primera variable 'data' que se pasa en la primera consulta es la id de la sala, todo esto funciona perfectamente..

Yo se que el código es complejo, es digamos le mi primer proyecto en node y bueno me falta ajustar y aprender a organizar mejor el código.
Espero me puedan ayudar. .Gracias de antemano, un cordial saludo.

Etiquetas: mysql, node, sql
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 03:38.