Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Инициализация модуля в текущем окружении (https://javascript.ru/forum/node-js-io-js/66788-inicializaciya-modulya-v-tekushhem-okruzhenii.html)

peter_iglaev 10.01.2017 17:01

Инициализация модуля в текущем окружении
 
Добрый день. Столкнулся со следующей проблемой в NodeJS.
Имеются:
data.json - данные по пользователю
{
 "firstname":"Иван",
 "lastname":"Иванов",
 "patronymic":"Иванович",
}

functions.js - файл с функцией возврата некоего значения из JSON
var data = require('./data');

function getProperty(attr) {
	return eval("data." + attr);
}

patronomyc.js - файл с определенным кодом, он поставляется в дистрибутиве к системе. Его нельзя изменять, его необходимо проверить. Соответсвенно, var subject = require('./functions'); нельзя добавить к нему
var attr = subject.getProperty("patronymic");
if (attr != null && attr.length>30)
  attr  = attr.substring(0,30);
return attr;


С помощью файлов data.json и functions.js я пытаюсь сэмулировать окружение для проверки работоспособности файла
patronomyc.js.

Создал для этого новый файл run.js
var subject = require('./functions');
var patr = require('./patronomyc');

но require('./patronomyc') выдает ошибку на неизвестный объект subject.

Как можно передать этот объект в модуль перед его инициализацией?
Либо, запустить инициализацию в текущем окружении с уже объявленным и доступным для patronomyc.js subject?


Модуль functions.js желательно также не трогать...

Заранее спасибо за консультацию.

kobezzza 10.01.2017 18:39

global.subject = require('./functions');
var patr = require('./patronomyc');


Или

var fs = require('fs');
var patr = new Function('subject', fs.readFileSync('./patronomyc').toString())(require('./functions'));


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