Bonjour,
Plantation du décor :
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).
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).
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;
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".
Partager