3

node.js + Express でビジネス指向のアプリケーション プラットフォームを開発する予定です。また、ユーザーが独自のネイティブな node.js モジュール (ファイル js、css、html のセット) を実行できるようにしたいので、通常はポータルとポート/サーブレットのようにする必要があります。ユーザーはクライアント部分を使用してサーバー側にモジュールをインストールでき、これらのモジュールはプラットフォームと対話し、他のモジュールはいくつかの API をスローする必要があります。そのため、これらのモジュールをシステム ファイルとデータベースへの直接アクセスから分離する必要がありましたが、独自のファイルとデータベースにアクセスできる必要があります。それを安全にするためにどの方向を掘るべきか教えてください。次の情報を確認しました: vm および子プロセスのサンドボックス。

私は試した:

// Main file:
var util = require('util'),
  vm = require('vm'),
  fs = require('fs'),
  sandbox = {
    animal: 'cat',
    count: 2,
    require: require // I pass it to make possible for the module to
                     // include some additional files 
                     // but it opens access for all system files
  };
var context = vm.createContext(sandbox);

fs.readFile('./user_modules/index.js', 'utf8', function (err, data) {
  vm.runInNewContext(data, context);
  console.log(util.inspect(context));
});


//** User Module 
// user_modules/index.js

var fs = require('fs');
count++;
animal = 'Dog';

fs.readFile('README.md', 'utf8', function (err, data) {
  animal = 'Fox';
});

REQUIREオブジェクトをモジュールに渡して、いくつかの追加ファイルを含めることを可能にしましたが、すべてのシステム ファイルへのアクセスを開きます。VM または子プロセスに特定のフォルダーのみを操作するように指示することは可能ですか? 現在、データベースの操作方法はわかりませんが、ユーザーがモジュールをインストールするときに、プラットフォームはすべてのファイルをコピーし、ユーザーの db スキームを作成する必要があると思います。その後、モジュールが起動するときに、ユーザーに接続されたオブジェクトのみを渡す必要がありますデータベーススキーム。

私を助けてください、私はノードに本当に慣れていません。私の問題を解決する方法はありますか?

前もって感謝します

4

1 に答える 1