Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   node js передача переменных в модули (https://javascript.ru/forum/node-js-io-js/54846-node-js-peredacha-peremennykh-v-moduli.html)

Roman159 03.04.2015 00:51

node js передача переменных в модули
 
Есть основной модуль main.js и есть еще один main2.js. Так вот, в main.js к примеру код
var test = 5,
main2 = require('./main2.js');


так вот, как в модуль main2.js грамотно передать содержимое переменной test ?

Сейчас делаю так
main.js:
var test = 5,
main2 = require('./main2.js')(test);


main2.js:
var test;
var func = function (tests) {
  test = tests;
}
module.exports = func;


Да, данный метод вроде и работает, но он жутко не удобен. Посоветуйте, как правильно передать переменную в модуль?

Erolast 10.04.2015 18:35

Цитата:

Посоветуйте, как правильно передать переменную в модуль?
Так не делается. Если переменная нужна в нескольких местах - выноси в отдельный модуль.

theKingOfJava 10.04.2015 20:09

Roman159,
Либо я тебя не понял, либо ты не совсем понимаешь о чем ты говоришь:)
Тебе не надо ничего никуда передавать. У тебя main2 инициируется в main, соответственно, твоя глобальная переменная и так будет доступна для кода, загруженного из main2, только объявляй ее без var в main. Но напрямую пользоваться глобальными переменными из других модулей -- это вобще-то не очень хорошая идея. Модуль он на то и модуль, чтобы быть независимым от чужих/других неймспейсов.

Лучше делай вот так:
main1:
var main1={
 init: function(o){for(var i in o) {if(!o.hasOwnProperty(i)) return; this[i]=o[i]}},
 f: function(val){console.log(val+this.x)}
}

module.exports=main1

main:
x=1
main1=require("./main1")
main1.init({x: x})

main1.f(2) // --> 3

Erolast 11.04.2015 07:23

Объявление без var/let в современном стандарте JS запрещено, потому что он по дизайну строго явный и в нем активно используются замыкания. Если хочется объявить что-то глобальное, то надо писать явно global.greeting = "Hello World", но... Глобал для личных целей в ноде не используется никогда, потому что это модульная платформа. Нет, бывают очень специфические случаи, вроде трансляции из другого языка, когда без него просто не обойтись, но к тебе это явно не относится.
Да, theKingOfJava, это я нубу, а не тебе, можешь не отвечать.


Часовой пояс GMT +3, время: 05:43.