0

さまざまなデバイスを管理する node.js ベースのサーバーを作成しています。node.js ベースのサーバーは、接続されたクライアントにその機能を伝えます。機能は、 を介して継承を使用しているオブジェクトを定義する個別の js ファイルによって定義されますutil.inherits()

私が抱えている問題は、現在、新しい機能用に新しい js を定義してから、メインの js プログラムをrequire新しい js に更新し、コードを変更して機能が利用可能であることを公開し、新しい機能を利用する必要があることです。クライアントから依頼されました。

メインコードをより一般的なものにして、それができるようにしたいと思います

  1. 新しい能力を発見し、
  2. それらを自動的に含め、
  3. クライアントに通知し、
  4. コードを利用します。

ツリー ブラウジングをサポートするさまざまな npm モジュールを介して実行できる検出は、すべての機能のサブディレクトリを指定して、そこにあるファイルを検出するだけです。ステップ 2に使用できると思いますがrequire(100% 確実ではありません)、ステップ 3 と 4 を実行する方法や、ステップ 2 の結果をステップ 3 と 4 で使用する方法がわかりません。

この問題を解決する方法についてのフィードバックをお待ちしております。


私の問題を明確にするために。現在、私のロジックは次のとおりです。

var logicA = requires('./capabilities/a.js');
var logicB = requires('./capabilities/b.js');
var logicC = requires('./capabilities/c.js');

var Comms.CAPABILITY_A = 'a';
var Comms.CAPABILITY_B = 'b';
var Comms.CAPABILITY_C = 'c';

var Comms.MSG_CAPABILITY = 0;
var Comms.MSG_DO_LOGIC = 1;

function onMessageReceived(comms, msgId, body) {
    switch (msgId) {
        case(MSG_DO_LOGIC):
           doLogic(body);
           break;
        ...
    }
}

function doLogic(flag) {
   switch(flag) {
      case(Comms.CAPABILITY_A):
          logicA.doLogic();
          break;

      case(Comms.CAPABILITY_B):
          logicB.doLogic();
          break;

      case(Comms.CAPABILITY_C):
          logicC.doLogic();
          break;
   }
}

クライアント側では、何が利用可能かを推測するロジックをハードコーディングしています。サーバーが機能の配列をクライアントに送信することでこれを削除できます。その後、クライアントは配列の要素の 1 つを選択し、ロジックを実行する要求としてそれを返すことができます。これは私の問題ではありません。

私の問題は、ホストプログラムにすべてのロジックを動的にロードさせ、動的にロードされたロジックで実行するロジックを評価する方法を理解することです。

動的と言うときは、使用可能なコードが実行時に決定されることを意味します。ただし、評価はサーバーが最初に起動されたときにのみ実行されます。

4

1 に答える 1