Partagez les variables entre les fichiers dans Node.js?

Voici 2 fichiers:

// main.js require('./modules'); console.log(name); // prints "foobar" // module.js name = "foobar"; 

Quand je n'ai pas "var", ça marche. Mais quand j'ai:

 // module.js var name = "foobar"; 

Le nom sera indéfini dans main.js.

J'ai entendu dire que les variables globales sont mauvaises et que vous préférez utiliser "var" avant les références. Mais est-ce un cas où les variables globales sont bonnes?

Les variables globales ne sont presque jamais une bonne chose (peut-être une exception ou deux là-bas …). Dans ce cas, il semble que vous souhaitiez vraiment exporter votre variable "nom". Par exemple,

 // module.js var name = "foobar"; // export it exports.name = name; 

Ensuite, dans main.js …

 //main.js // get a reference to your required module var myModule = require('./module'); // name is a member of myModule due to the export above var name = myModule.name; 

Une variable déclarée avec ou sans le mot-clé var est attachée à l'objet global. C'est la base pour créer des variables globales dans Node en déclarant des variables sans le mot-clé var. Alors que les variables déclarées avec le mot-clé var restent locales dans un module.

Voir cet article pour une meilleure compréhension – https://www.hacksparrow.com/global-variables-in-node-js.html

Pour partager la variable entre le module, vous pouvez utiliser la fonction pour obtenir la valeur de la variable entre le principal et les modules.

 //myModule.js var mainFunction = null; //You can also put function reference in a Object or Array function functionProxy(func){ mainFunction = func; //Save the function reference } // --- Usage --- // setTimeout(function(){ // console.log(mainFunction('myString')); // console.log(mainFunction('myNumber')); // }, 3000); module.exports = { functionProxy:functionProxy } 

.

 //main.js var myModule = require('./myModule.js'); var myString = "heyy"; var myNumber = 12345; function internalVariable(select){ if(select=='myString') return myString; else if(select=='myNumber') return myNumber; else return null; } myModule.functionProxy(internalVariable); // --- If you like to be able to set the variable too --- // function internalVariable(select, set){ // if(select=='myString'){ // if(set!=undefined) myString = set; // else return myString; // } // else if(select=='myNumber'){ // if(set!=undefined) myNumber = set; // else return myNumber; // } // else return null; // } 

Vous pouvez toujours obtenir la valeur de main.js même si la valeur a été modifiée.