2017-12-11 17 views
2

こんにちは。ノード内の動的関数呼び出し(フレームワークなし)

2週間前に私はノードを勉強し始めました。 トレーニングとしてMVCで構築したサーバーを実装することにしました。 私はそれをPHPでやっていました。 関数呼び出しを実装することはできません。関数呼び出しはプログラムによって計算されます。ファイルで

ファイルrouter.js

var maincontroller = require("../controllers/maincontroller"); 
var storecontroller = require("../controllers/storecontroller"); 
var additionalcontroller = require("../controllers/additionalcontroller"); 

module.exports = { 
    findMainRoute: function (globalarray) { 
    ... code   
       var nameOfController = temparray[0]; 
       var nameOfFunction = temparray[1]; 
       // var execFunction = nameOfController + '.' + nameOfFunction +'(globalarray);'; 
       // eval(execFunction); 
     ... code 
    } 
} 

、プログラムは、コントローラの名前とルータの実行に必要な関数の名前を計算します。コメント行では、この関数をEVALで呼び出します。この方法は機能しますが、私には合いません。

動作する瞬間、コントローラの1つが呼び出されます。 コントローラmaincontroller.js

module.exports = { 
    processingMain: function (globalarray) { 
    ... code 
     globalarray.readFile = globalarray.mainDirectory + '/app/views/0000_main.html'; 
     globalarray.contentType = 'text/html'; 
    ... code 
    } 
} 

コールが動的なかったら、私はこのようなコントローラへの呼び出しを記述します。

JS /ノードのコードは、私はevalのを置き換えるために書くべき
maincontroller.processingMain(globalarray); 

PHP関数のアナログcall_user_func_arrayを使用していますか? 3日間私は100種類のアプリケーションの適用、呼び出し、新しい機能を試しました。 Jsについての私の知識は、そのような仕事には弱すぎるようです。

答えて

0

技術的に、あなたは常に文字列を経由して、オブジェクトのメソッドを実行することができます。

let basicObject = { 
    method:() => console.log('method was executed') 
} 

let methodName = 'method'; 

basicObject[methodName](); //prints "method was executed" 

たぶん、あなたはそのどこかに統合することができます。