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

Nodejs banned list

Estas en el tema de Nodejs banned list en el foro de Node.js en Foros del Web. Hola tengo una funcion que debe de devolver true si un usuario es baneado, pero estoy usando fs para leer la lista de baneos y ...
  #1 (permalink)  
Antiguo 06/09/2013, 02:00
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Nodejs banned list

Hola tengo una funcion que debe de devolver true si un usuario es baneado, pero estoy usando fs para leer la lista de baneos y esta tiene una funcion cellback de modo que no se como devolver true en la funcion de banneo:

Código Javascript:
Ver original
  1. module.exports={
  2.     isBanned:function(ip){
  3.         var fs=require('fs');
  4.         var fileName='./views/bannedList.txt';
  5.         fs.exists(fileName,function(exists){
  6.             if(exists){
  7.                 fs.stat(fileName,function(err,stats){
  8.                     if(err)throw err;
  9.                     fs.open(fileName,'r',function(err,fd){
  10.                         var buffer=new Buffer(stats.size);
  11.                         fs.read(fd,buffer,0,buffer.length,null,function(err,bytesRead,buffer){
  12.                             bannedips=buffer.toString('utf8',0,buffer.length);
  13.                             bannedips=bannedips.split('|||');
  14.                             for(var a=0;a<bannedips.length;a++){
  15.                                 console.log(ip);
  16.                                 console.log(bannedips[a]);
  17.                                 if(bannedips[a]==ip)return true;//Aqui devuelvo true pero en la funcion cellback de fs.read y yo quiero hacer lo en la funcion isBanned
  18.                             }
  19.                             return false;
  20.                         });
  21.                     });
  22.                 });
  23.             }else{
  24.                 console.log('Banned file don\'t exists. Exit program!');
  25.                 process.exit(code=0);
  26.             }
  27.         });
  28.     }
  29. }

Alguna idea
  #2 (permalink)  
Antiguo 06/09/2013, 09:08
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: Nodejs banned list

No termino de entender tu problema amigo, ¿Que te ocurre exactamente? ¿Que no te devuelve el "true/false"?

No he probado el codigo, pero ojeando por encima no veo nada mal en el. Y que el resultado te lo delvuelva al final de todos los callback, es correcto, pues si se devolviera antes, podria ocurrir que el fs aún estubiera leyendo el archivo y no tendrías los valores para comprar.

Asumiendo, que el archivo de los baneado existe (y esta bien referenciado), que se lee y se splitea correctamente y en los consoles log que tienes puesto aparecen los valores que esperas, no debería haber impediento para que se devolviera el "true" si procede invocando a la función.

Concreta un poco más tu duda o tu problema, y podremos ayudarte mejor.
  #3 (permalink)  
Antiguo 06/09/2013, 14:55
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Nodejs banned list

Cita:
Iniciado por kikeking1 Ver Mensaje
No termino de entender tu problema amigo, ¿Que te ocurre exactamente? ¿Que no te devuelve el "true/false"?

No he probado el codigo, pero ojeando por encima no veo nada mal en el. Y que el resultado te lo delvuelva al final de todos los callback, es correcto, pues si se devolviera antes, podria ocurrir que el fs aún estubiera leyendo el archivo y no tendrías los valores para comprar.

Asumiendo, que el archivo de los baneado existe (y esta bien referenciado), que se lee y se splitea correctamente y en los consoles log que tienes puesto aparecen los valores que esperas, no debería haber impediento para que se devolviera el "true" si procede invocando a la función.

Concreta un poco más tu duda o tu problema, y podremos ayudarte mejor.
A ver el problema es que todo esta bien pero esto B]if(bannedips[a]==ip)return true;[/B] lo compruebo dentro de la funcion cellback de fs.read(fd,buffer,0,buffer.length,null,function(er r,bytesRead,buffer){
Con lo que si se cumple la condicion anterior la funcion de fs.read devuelve el valor true pero no la funcion de isBanned(); ya que para que la funcion isBanned devuelva true debe de ser algo como esto:

Código Javascript:
Ver original
  1. module.exports={
  2.     isBanned:function(ip){
  3.         var fs=require('fs');
  4.         var fileName='./views/bannedList.txt';
  5.         fs.exists(fileName,function(exists){
  6.             if(exists){
  7.                 fs.stat(fileName,function(err,stats){
  8.                     if(err)throw err;
  9.                     fs.open(fileName,'r',function(err,fd){
  10.                         var buffer=new Buffer(stats.size);
  11.                         fs.read(fd,buffer,0,buffer.length,null,function(err,bytesRead,buffer){
  12.                             bannedips=buffer.toString('utf8',0,buffer.length);
  13.                             bannedips=bannedips.split('|||');
  14.                             for(var a=0;a<bannedips.length;a++){
  15.                                 console.log(ip);
  16.                                 console.log(bannedips[a]);
  17.                                 if(bannedips[a]==ip)return true;//Aqui devuelvo true pero en la funcion cellback de fs.read y yo quiero hacer lo en la funcion isBanned
  18.                             }
  19.                             return false;
  20.                         });
  21.                     });
  22.                 });
  23.             }else{
  24.                 console.log('Banned file don\'t exists. Exit program!');
  25.                 process.exit(code=0);
  26.             }
  27.         });
  28.  
  29.         return true;//>>>Aqui devuelve true la funcion isBanned y no la funcion cellback de fs.read
  30.     }
  31. }

Ahora me he explicado bien ??

Saludos
  #4 (permalink)  
Antiguo 08/09/2013, 19:48
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 11 años, 8 meses
Puntos: 17
Respuesta: Nodejs banned list

Hola,

pero si vas a usar

Código PHP:
module.exports={
    
isBanned:function(ip callback ){
        var 
fs=require('fs');
        var 
fileName='./views/bannedList.txt';
        
fs.exists(fileName,function(exists){
            if(
exists){
                
fs.stat(fileName,function(err,stats){
                    if(
err)throw err;
                    
fs.open(fileName,'r',function(err,fd){
                        var 
buffer=new Buffer(stats.size);
                        
fs.read(fd,buffer,0,buffer.length,null,function(err,bytesRead,buffer){
                            
bannedips=buffer.toString('utf8',0,buffer.length);
                            
bannedips=bannedips.split('|||');
                            for(var 
a=0;a<bannedips.length;a++){
                                
console.log(ip);
                                
console.log(bannedips[a]);
                                if(
bannedips[a]==ip)
                                
callback(true); // estas en una funcion anonima no puedes usar return porque estas asiendo una funcion asycronica.
                            
}
                           
callback(false);
                        });
                    });
                });
            }else{
                
console.log('Banned file don\'t exists. Exit program!');
                
process.exit(code=0);
            }
        });
 
       
callback(true);
    }

Digamos que vas a testear un ip, entonce
Código PHP:
isBanned(192.168.1.1 , function(res){
   
// tienes un retorno en el callback
   /**
     *sigue o no con otras funciones o pruebas importantes aquí
     */
   
if(res === true){
   }
}) 
Ya que tu function que prueba si el ip esta baneado es importante , todo deberia hacerse dentro de la function anónima.
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #5 (permalink)  
Antiguo 09/09/2013, 00:50
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Nodejs banned list

Hola, muchas gracias funciono :)

Pero una cosa, note que cuando el archivo bannedList.txt es vacio muestra error del buffer.
Como se puede solucionar.

Hay alguna manera de esconder este archivo en nodejs ?? Y cuando un socket se desconecta sale del room automáticamente?? Y si no hay mas sockets el room se elimina?

Saludos

Última edición por patilanz; 09/09/2013 a las 02:53
  #6 (permalink)  
Antiguo 09/09/2013, 09:43
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 11 años, 8 meses
Puntos: 17
Respuesta: Nodejs banned list

Hola,
Yo no eh trabajado con file system en node.js , utilizo el module de mysql , ahora para sacar al usuario del rooms, tienes que usar socket.leave('nombre del cuarto'); y cuando no hay nadie creo que socket.io lo destruye, ojo tomando encuenta que usas socket.io .

Porque te da error si la lista esta vacía?,
es porque el script intenta continuar con valores vacíos?
deberías de probar null y '' en el retorno de tu lista y no continuar con el loop a menos que tenga valores no iguales a espacios o nulos..

espero me explique..
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com

Etiquetas: funcion, javascript, list
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:16.