1

私は現在、実行時および実行時にメモリ内のオブジェクトを生成および変更する必要があるnode.jsプロジェクトに取り組んでいます。これは紛らわしいように聞こえるので、ここに例を示します。

月曜日の午前10時:

var PI = Math.PI;

exports.area = function (r) {
   return PI * r * r;
};

月曜日の午前11時:

var PI = Math.PI;
var minSize = 10;

exports.area = function (r) {
   if (r >= minSize) {
      return PI * r * r;
   } else {
      return "Error: Minimum size not met.";
   }
};

月曜日正午:

var PI = Math.PI;
var minSize = 10;
var msg = "Error: Minimum size of " + minSize + "not met.";    

exports.area = function (r) {
   if (r >= minSize) {
      return PI * r * r;
   } else {
      return msg;
   }
};

火曜日午前10時:

var PI = Math.PI;
var minSize = 15;
var error['eng'] = "Error: Minimum size of " + minSize + "not met.";    
var error['chn'] = "錯誤:不符合最小尺寸:" + minSize + "。"    

exports.area = function (r) {
   if (r >= minSize) {
      return PI * r * r;
   } else {
      return error;
   }
};

exports.circumference = function (r) {
   if (r >= minSize) {
      return 2 * PI * r;
   } else {
      return error;
   }
};

これは少し不自然な例です。適切な計画を立てることでほとんどの変更を回避できるためですが、それはポイントを説明するためのものです。このモジュールは、変数と関数の両方で変化し続け、サーバーの実行中に拡張されました。

これが私が持っている制限です:

  • プロトタイプの継承を使用する(キーワード「新規」なし)
  • 変更は、関数の次の呼び出しで有効になります
  • 変更には、新しい変数と関数の追加が含まれます
  • サーバーを再起動するために変更を保存する必要があります
  • eval()は使用できません

私は2つの可能な戦略を考えました:

  1. .prototypeを使用して、関数と変数の追加/変更を続けます。

    • 長所:サーバーの実行中にそれを行うことができます
    • 短所:ファイルに保存する方法がわかりません。私の知る限り、何らかの方法でeval()を使用せずに関数をファイルに保存することはできません。
  2. ファイルを直接編集し、node-supervisorなどを介してファイルを再読み込みします。

    • 長所:変更は保存され、バージョンは保存されて元に戻されます
    • 短所:ファイルを直接編集すると、eval()を使用してもほぼ同じ結果になると思います。つまり、誰かが悪意のあるものを盗んだ場合、システムが破損する可能性があります。

今考えられるのはそれだけです。この分野での意見やオプションをいただければ幸いです。

4

1 に答える 1

0

将来の参考のために:

結論:関数を保存してサンドボックスの範囲内で安全に実行することは不可能ではありません。それはあまり実用的ではありません。

別の解決策:関数自体がそれほど複雑でない場合は、呼び出しをDSLの形式で保存し、後で解析して戻すことは不可能ではありません。

于 2012-06-09T16:20:59.530 に答える