usar node modulos funciones exports exportar example dollars convert como coin javascript node.js variables module global-variables

javascript - modulos - ¿Cómo pasar variables a los módulos NodeJS?



modulos node js (3)

Debería funcionar bien Aquí hay un ejemplo de trabajo:

index.js

var module = require(''./module.js''); module.myvar = ''Hello world''; module.test();

module.js

module.exports = { test: function() { console.log(''var is'', this.myvar); } };

Tenga en cuenta si utiliza this en un cierre que el alcance ya no es el módulo en sí. Entonces ese podría ser tu problema.

¿Me puede mostrar la parte del código del módulo donde usa esto?

En uno de mis archivos JS, incluyo otro. ¿Cómo puedo establecer las variables en el módulo incluido?

Pensé que hacer algo como esto funcionaría

var mymodule = require(''mymodule.js''); mymodule.myvariable = ''test'';

Y luego en mymodule

this.myvariable === ''test'';

Pero esto no funciona, no está undefined . ¿Cuáles son las diversas opciones para pasar un valor a un módulo? Podría simplemente agregar la variable como parámetro a cada función que llamo en mymodule, pero eso no es ideal.

¿Hay alguna manera de hacerlo sin globales, para que pueda establecer las variables de forma independiente en varios módulos necesarios, como este?

var mymodule1 = require(''mymodule.js''); var mymodule2 = require(''mymodule.js''); mymodule1.myvariable = ''test1''; mymodule2.myvariable = ''test2'';


El problema con lo que estabas haciendo es que estableces la variable después de la importación, pero this.myvariable === ''test''; se llamaba cuando se importó el módulo, antes de que se estableciera su variable.

Puede hacer que su módulo exporte una función y luego llamar a la función cuando la importa, pasando su variable como argumento.

module.exports = function(myVar) { var myModule = { // has access to myVar ... }; return myModule; };

Cuando importas,

var myModule = require(''myModule'')(myVar);

Si usa este método, tenga en cuenta que obtiene una instancia diferente de su módulo donde sea que importe, que puede no ser lo que desea.

Si desea establecer valores de un módulo fuera del módulo, una buena opción es hacer que su módulo exporte un objeto con un método setter, y usarlo para establecer el valor de la variable como una propiedad del objeto. Esto deja más claro que desea que este valor sea configurable, mientras que hacer myModule.myVar = puede configurarlo para confusión más adelante.

module.exports = { myVar: null, setMyVar: function(myVar) { this.myVar = myVar; }, ... };

En este caso, está accediendo a la misma instancia del modelo donde quiera que lo importe.

Editar en respuesta al comentario

En la primera opción, muestra dónde obtiene una instancia diferente cada vez, ¿cómo puedo exportar varias funciones que comparten el mismo myVar? Si ese módulo exporta 5 funciones cada una que necesita myVar, ¿puedo configurarlo en un lugar como en el momento de la importación en lugar de pasarlo a cada función?

No estoy del todo seguro si entiendo lo que está describiendo, pero podría hacer algo como esto:

module.exports = function(myVar) { var modules = {}; modules.someModule = {...}; modules.anotherModule = {...}; ... return modules; };

Cada uno de estos submódulos tendría acceso al mismo myVar. Entonces importaría como arriba y el resultado sería un objeto que contiene cada uno de sus cinco módulos como propiedades. No puedo decir si esta es una buena idea, se está complicando, pero tal vez tenga sentido para su situación.


NodeJS require() siempre cargará el módulo una vez, por lo que deberá implementar el alcance en su módulo donde pueden existir diferentes instancias del módulo con su propio estado interno.

Puede implementar su módulo como una clase JS como:

var MyModule = function(){}; MyModule.prototype.someFunction = function(params){ this.someVar = params; } MyModule.prototype.anotherFunction = function(key, value){ this[key] = value; } module.exports = MyModule;

Luego en tu código;

var MyModule = require(''MyModule''); someModule = new MyModule(); // treat someModule like an object with its getters/setters/functions