Использовать переменные между файлами в Node.js?

Вот 2 файла:

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

// module.js
name = "foobar";

Когда у меня нет "var", он работает. Но когда у меня есть:

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

имя будет undefined в main.js.

Я слышал, что глобальные переменные являются плохими, и лучше использовать "var" перед ссылками. Но разве это случай, когда глобальные переменные хороши?

Ответ 1

Глобальные переменные почти никогда не бывают хорошими (может быть, исключение или два там...). В этом случае похоже, что вы действительно хотите экспортировать свою переменную "имя". Например.

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

Затем в 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;

Ответ 2

Если нам нужно использовать несколько переменных, используйте формат ниже

//module.js
   let name='foobar';
   let city='xyz';
   let company='companyName';

   module.exports={
    name,
    city,
    company
  }

Использование

  // main.js
    require('./modules');
    console.log(name); // print 'foobar'

Ответ 3

переменная, объявленная с ключевым словом var или без него, привязана к глобальному объекту. Это основа для создания глобальных переменных в Node путем объявления переменных без ключевого слова var. Хотя переменные, объявленные с ключевым словом var, остаются локальными для модуля.

см. эту статью для дальнейшего понимания - https://www.hacksparrow.com/global-variables-in-node-js.html

Ответ 4

Для обмена переменной между модулем вы можете использовать функцию для получения значения переменной между основным и модулями.

//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;
// }

Вы всегда можете получить значение от main.js даже при изменении значения.