Как динамически создавать и и вызывать функцию во время выполнения в NodeJS

#javascript #node.js

#javascript #node.js

Вопрос:

Вот как я динамически добавляю функцию к объекту window во время выполнения:

 (function (myPluginModuleLib, $, undefined) {
    myPluginModuleLib.myModuleMethod =  (varArgs) => {
        console.log('Dynamic Call :  '   varArgs);
    };
}(window.myPluginModuleLib = window.myPluginModuleLib || {}, jQuery));  
  

Тогда я могу глобально вызвать ее в любое время :

 window.myPluginModuleLib.myModuleMethod('HELLO WORLD PARAMS!');  
  

Есть ли аналогичный способ сделать это в NodeJS? Я хотел бы добавить функцию в память. Например, в основном app.js , чтобы я мог вызывать его по требованию, вместо того, чтобы всегда создавать его из строки:

 let myModuleMethodString = 'var myModuleMethod = (varArgs) => { console.log("Dynamic Call : "   varArgs) }';
myModuleMethodString = myModuleMethodString.slice(myModuleMethodString.indexOf("{")   1, myModuleMethodString.lastIndexOf("}"));

let myModuleMethod = new Function("varArgs", 'console.log("Dynamic Call : "   varArgs)');

try {
    myModuleMethod('HELLO WORLD PARAMS!');
} catch (error) {
    console.log(error);
}
  

Заранее благодарю вас всех.

Комментарии:

1. Как вы думаете, почему вы не можете сделать это аналогично тому, как вы делаете это в браузере? Это все еще JavaScript….

2. В браузере я прикрепляю ее к объекту window. Как мне это сделать в узле, на стороне сервера?

3. @Program-Me-Rev, вы не можете подключиться к окну, которое запущено в вашем браузере (клиенте) из Node.js код, запущенный на вашем сервере. Это должно быть сделано в клиентском коде.

Ответ №1:

Если вы хотите придерживаться этого решения, то вы можете использовать глобальное пространство имен в Node JS, что похоже на окно в браузерах, хотя не рекомендуется использовать глобальные переменные.

Пример:

 global.myPluginModuleLib = {
    myModuleMethod : (varArgs) => {
        console.log('Dynamic Call :  '   varArgs);
    }
};
global.myPluginModuleLib.myModuleMethod('HELLO WORLD PARAMS!');    

Ответ №2:

короткий ответ: вы можете просто использовать «глобальный» вместо «окна». Дополнительная информация здесь: https://stackabuse.com/using-global-variables-in-node-js /

Длинный ответ: это не то, что вы когда-либо должны делать в Node.js . Это просто загрязняет глобальный контекст. Все ваши функции всегда должны определяться в контексте определенного модуля