Использовать переменные между файлами в 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
даже при изменении значения.