Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/09/2013, 14:55
Avatar de patilanz
patilanz
 
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 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