IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

readdir-js : faire un test de parité pour shunter une instruction


Sujet :

NodeJS

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Par défaut readdir-js : faire un test de parité pour shunter une instruction
    Bonjour,

    Plantation du décor :
    Nom : schema app1.png
Affichages : 229
Taille : 18,7 Ko

    Schéma de mon application.

    J'ai cette application qui lance un serveur Web, tout fonctionne à merveille :

    • traitement de l'url ;
    • routeur qui consulte cache.json pour redéfinir les chemins (pas besoin d'ouvrir routeur.js pour redéfinir les chemins) ;
    • et chose non voulue au départ mais que je trouve sympa, j'ajoute (ou supprime) un module Web dans le dossier prévu à cet effet et le routeur le prend en compte "à chaud" (sans redémarrage de l'application).


    Mon souci : c'est que readdir.js est appelé toutes les 500 millisecondes (et même s'il était appelé toutes les 30 secondes, toutes les minutes voir toute les demi heures... le problème reste le même).

    Si mon dossier contient "500" fichiers, readdir.js va comparer 1 à 1 les chemins qui pourrait correspondre aux modules Web (le script est assez lourd).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    var fs = require("fs"),
        path = require("path");
     
    function test(dossier) {
    var p = "./" + dossier + "/";
    	fs.readdir(p, function (err, files) {
    	    if (err) {
    	        throw err;
    	    }
     
    	    if (!cache) {
    					    var contenu_fichier = fs.readFileSync(dossier +".json", 'utf-8');    
    					    var cache = JSON.parse(contenu_fichier);
    					}
     
    	    files.forEach(function(file) {
    		    fs.stat(p+file, function(err, stats) {
    		    	var extension = path.extname(p+file)
    		      if (stats.isFile()) {
     
    		      		var futureModule = "/"+file;
    		      		futureModule = futureModule.substring(0,file.length-extension.length+1);
     
    					if (extension === ".js"){
     
    					    var trouve = false;
    					    var k = 0;
    					    while(k<cache.length) {
    					        if(cache[k].module === futureModule) {
     
    					            trouve = true;
     
    					        }
    					        if (!fs.existsSync(p + cache[k].module + '.js')) { 
    	  							cache.splice(k, 1);
    	  							console.log(cache);
    							} 
    					        k++;
    					    }
     
    					    if(trouve === false) {
    					        nouveauModule = {};
    					        nouveauModule.path = futureModule;
    					        nouveauModule.module = futureModule;
    					        cache[cache.length] = nouveauModule;
    					    }
     
    					    contenu_fichier = JSON.stringify(cache);
     
    					        fs.writeFileSync(dossier +".json", contenu_fichier, 'utf-8');
    					}
    		      	}
    	    	});
    		});
    	});
    }
     
    module.exports = test;
    Ma solution serait de faire un "test de parité" entre les variables "files" et "cache". Faire une condition genre if (files.length <> cache.length) qui engloberait files.forEach(function(file).

    Malheureusement, "je vois pas comment" !

    En espérant avoir été clair dans mes explication, merci aux courageux qui pourront me répondre !

    Manuel CQE

    NB: je ne veux compter que les fichiers ".js".

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Par défaut
    Problème résolu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    var fs = require("fs"),
        path = require("path");
     
    function test(dossier) {
    var p = "./" + dossier + "/";
    	fs.readdir(p, function (err, files) {
    		var nbFileDir = 1
    	    if (err) {
    	        throw err;
    	    }
    	    files.forEach(function(file) {
    	    			var extension = path.extname(p+file)
    					if (extension === ".js"){
    						nbFileDir += 1;
    					}
     
    		});
    					    var contenu_fichier = fs.readFileSync(dossier +".json", 'utf-8');    
    					    var cache = JSON.parse(contenu_fichier);
    					    var nbFileCache = cache.length;
    		if (nbFileCache == nbFileDir) {
    		} else{
     
    		    files.forEach(function(file) {
    			    fs.stat(p+file, function(err, stats) {
    			    	var extension = path.extname(p+file)
    			      if (stats.isFile()) {
     
    			      		var futureModule = "/"+file;
    			      		futureModule = futureModule.substring(0,file.length-extension.length+1);
     
    						if (extension === ".js"){
     
    						    var trouve = false;
    						    var k = 0;
    						    while(k<cache.length) {
    						        if(cache[k].module === futureModule) {
     
    						            trouve = true;
     
    						        }
    						        if (!fs.existsSync(p + cache[k].module + '.js')) { 
    		  							cache.splice(k, 1);
    		  							console.log(cache);
    								} 
    						        k++;
    						    }
     
    						    if(trouve === false) {
    						        nouveauModule = {};
    						        nouveauModule.path = futureModule;
    						        nouveauModule.module = futureModule;
    						        cache[cache.length] = nouveauModule;
    						        console.log(nouveauModule);
    						    }
     
    						    contenu_fichier = JSON.stringify(cache);
     
    						        fs.writeFileSync(dossier +".json", contenu_fichier, 'utf-8');
    						}
    			      	}
    		    	});
    			});
    		}
    	});
    }
     
    module.exports = test;
    grâce à ce ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    var nbFileDir = 1
    	    if (err) {
    	        throw err;
    	    }
    	    files.forEach(function(file) {
    	    			var extension = path.extname(p+file)
    					if (extension === ".js"){
    						nbFileDir += 1;
    					}
     
    		});
    					    var contenu_fichier = fs.readFileSync(dossier +".json", 'utf-8');    
    					    var cache = JSON.parse(contenu_fichier);
    					    var nbFileCache = cache.length;
    		if (nbFileCache == nbFileDir) {
                               // faire qqchose qd  le nombre de .js dans le dossier correspond au nombre de path défini dans le cache
    		} else{
                              // faire qqchose qd  le nombre de .js dans le dossier est different au nombre de path défini dans le cache
                    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/06/2015, 12h27
  2. Faire un test avec <s:if> dans une JSP
    Par leara500 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 20/06/2013, 20h21
  3. Faire un test avec <s:if> dans une JSP
    Par leara500 dans le forum Struts 2
    Réponses: 1
    Dernier message: 19/06/2013, 16h11
  4. Faire un test dans une procédure
    Par PrinceMaster77 dans le forum SQL
    Réponses: 1
    Dernier message: 23/11/2004, 09h55
  5. faire un test sur un programme externe
    Par marieheraud dans le forum Windows
    Réponses: 3
    Dernier message: 02/09/2004, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo