Solución:
Tu problema es que cuando lo haces var count = require('./main.js').count;
, obtiene una copia de ese número, no una referencia. Cambiando count
no cambia la “fuente”.
Sin embargo, debería tener las funciones de exportación de archivos. Requerir un archivo solo lo ejecutará la primera vez, pero después de eso se almacena en caché y no se vuelve a ejecutar. ver documentos
Sugerencia n. ° 1:
// main.js
var count = 1;
var add = require('./add.js');
count = add(count);
// add.js
module.exports = function add(count) {
return count+10;
}
# 2:
var count = 1;
var add = function() {
count += 10;
}
add();
# 3: Personalmente, crearía un módulo de contador (esta es una instancia única, pero puede convertirla fácilmente en una “clase”):
// main.js
var counter = require('./counter.js');
counter.add();
console.log(counter.count);
// counter.js
var Counter = module.exports = {
count: 1,
add: function() {
Counter.count += 10;
},
remove: function() {
Counter.count += 10;
}
}
No estoy seguro de si esto es nuevo o no, pero de hecho puede compartir variables entre archivos como tales:
main.js
exports.main = {
facebook: null
};
counter.js
var jamie = require('./main');
console.info(jamie); //{facebook: null}
jamie.main.facebook = false;
console.info(jamie); //{facebook: false}
anothercheck.js
var jamie = require('./main');
console.info(jamie); //{facebook: null} //values aren't updated when importing from the same file.
jamie.main.facebook = true;
console.info(jamie); //{facebook: true}
Ahora puedes compartir archivos entre archivos.
Tengo el mismo problema que tú, .. A veces me gustaría compartir variables entre varios archivos porque me encanta el estilo modular, por ejemplo. separando controlador, función, modelos en diferentes carpetas / archivos en mi script node.js para poder administrar fácilmente el código.
No sé si esta es la mejor solución, pero espero que se adapte a sus necesidades.
modelos / data.js
// exports empty array
module.exports = [];
controladores / somecontroller.js
var myVar = require('../models/data');
myVar.push({name: 'Alex', age: 20});
console.log(myVar);
// [{ name: 'Alex', age: 20 }]
controladores / anotherController.js
var myVar = require('../models/data');
console.log(myVar);
// This array has value set from somecontroller.js before...
// [{ name: 'Alex', age: 20 }]
// Put new value to array
myVar.push({name: 'John', age: 17});
console.log(myVar);
// Value will be added to an array
// [{ name: 'Alex', age: 20 }, { name: 'John', age: 17}]