更新1:私はこれで多くの進歩を遂げました。私は、ユーザーがアップロードしたモジュールを許可するという考えを(少なくとも今のところは、しかしおそらく長期的には)ほとんどあきらめました。ただし、複数のモジュールを定義してロードできるように構造を開発しています。モジュールが初期化され、独自のルートが設定され、提供されるJavascriptの「パブリック」ディレクトリが作成されます。モジュールを見るほど、システム全体にある呼び出しも移動できる(すべきである)ことに気付きます。 「システム」と呼ばれるモジュールで。
更新2:私はこれに関して大きな進歩を遂げました。私はGitHubで大量のコードをコミットしようとしています。これにより、NodeとExpressを使用して、本当に優れたモジュラープログラミング(クライアント側とサーバー側の両方のコードを公開するモジュールを使用)を実行できるようになります。しばらくお待ちください。
更新3:モジュールを登録し、イベント/フックシステムを介して通信できるようにするシステムとしてこれを書き直しました。それは非常にうまくやって来ています。私はすでにたくさんのコードを持っています-私はそれを新しいシステムに移植しているだけです。GitHubでプロジェクトを自由に見てください:https ://github.com/mercmobily/hotplate )
更新4:これは良いことです。モジュールがクライアントでありサーバーであるという私の考えは実際に機能していることがわかりました。
更新5:モジュールは使用可能なものに近づいています。init()関数がinvokeAll()するものを考慮に入れ、そのフックを提供するモジュールが最初にロードされることを確認する新しいローダーを実装しました。これにより、ホットプレートがまったく新しいレベルに開かれます。
更新6:ホットプレートは12000行のコードに近づいています。終了するまでに、2月のいつか、20000行近くのコードになると思います。それはたくさんのことをします、そしてそれはすべてここStackOverflowで始まりました!独自のSaaSを開発するために必要なので、2月までに完成させる必要があります(7月までスプリントして、BookingDojoの最初のバージョンを完成させるため)。みんなありがとう!
私はおそらくかなり大きなソフトウェアになる何かを書いています。簡単に言うと、nodejs + Express + Mongodb / Mongoose + Dojo(クライアント側)です。
注:このテキストの質問には、[Q1]、[Q2]などのマークが付いています。
Drupalのバックグラウンドから来て(そしてそれがどのように進化したかを知っているので、避けたいことです)、私は少しモジュールフリークです。現時点では、アプリケーションの定型文(ホットプレート:https ://github.com/mercmobily/hotplate )を実行しました。それは退屈なこと(ユーザー、ワークスペース、パスワードリマインダーなど)のすべてを行い、かなりの数の部分が欠けています。
Drupalと同様の方法で(ただしおそらくより良い)モジュールを使用できるようにする設計を考え出したいと思います。あれは:
- モジュールは新しいルートを定義し、それらを処理できます
- モジュールはシステム全体にインストールされ、各ワークスペースでモジュールのセットリストを有効にできます
初期のアーキテクチャは、これらの線に沿ったものである可能性があります。
- 「モジュール」ディレクトリ。モジュールごとに1つのディレクトリがあります。
- 各モジュールには、Javascript側の「パブリック」ファイル用のディレクトリがあります
- 各モジュールには、アプリのjavascriptに含まれるpublic/startup.jsがあります
- 各モジュールにはserver/node.jsがあり、必要に応じてサーバーによってその場で含まれます。
- /app/:workspaceid/modules/MODULE_NAME/.*のような1つのルートが定義され、そのワークスペースでMODULE_NAMEが有効になっているかどうかをチェックするミドルウェアがあります。有効になっている場合は、渡されたパラメーターを使用してモジュールの関数を呼び出します。
[Q1]:これは漠然と正気ですか?
問題:
これをダイナミックにしたい。その場で必要なときにモジュールを必要としています。これは、その場で物事を要求することによって、行うのに十分簡単なはずです。
server / node.jsには呼び出される関数がありますが、その関数はルーター自体に非常によく似ているように感じます。
【Q2】これについて何か具体的なヒントはありますか?
これらはそれほど心配する必要はないようです。ただし、本当の問題は、セキュリティについて話すときに発生します。
プライバシー。これは厄介なものです。現時点では、すべての呼び出しが、workspaceIdによるmongoDbフィルタリングに対して適切なクエリを実行します。モジュールがデータベースに明確にアクセスできないようにし、各モジュールが他のワークスペースに属するデータにアクセスできないようにする方法を強制したいと思います。
ユーザー定義モジュール。ユーザーが自分のモジュールをアップロードできるようにしたいと思います(そして、おそらく他のユーザーがそれらを利用できるようにしたいです)。しかし、これは事実上、ノード自体によって実行されるコードをアップロードできるようにすることを意味します。これについてどうしますか?
[Q3]これらのプライバシー/セキュリティの問題についてどう思いますか?たとえば、ユーザーがアップロードしたコードを一種のノードサンドボックスで実行する方法はありますか?ファイルシステムなどへのアクセスはどうですか?
ありがとう!