12

更新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]これらのプライバシー/セキュリティの問題についてどう思いますか?たとえば、ユーザーがアップロードしたコードを一種のノードサンドボックスで実行する方法はありますか?ファイルシステムなどへのアクセスはどうですか?

ありがとう!

4

1 に答える 1

5

結局、私はこれに自分で答えました-難しい方法です。答え:ホットプレート、https ://github.com/mercmobily/hotplate

それは私が上で説明したことのほとんどを行います。さらに重要なことに、hotPlate(デフォルトで使用可能なhotPageとhotClientPagesを使用)を使用して、次のようなモジュールを作成できます。

  1. いくつかのルートを定義します
  2. UIで「パブリック」ディレクトリを定義します
  3. そのモジュールをロードするときにロードする必要がある特定のCSSおよびJSファイルを定義します
  4. 必要に応じてルート固有のJSを追加できます

ステータス:この回答のポイントであるHotplateの「コア」の開発が終了したため、この回答を受け入れています。私はまだ物事を「行う」必要があります(たとえば、ドキュメントを作成したら、サンプルサーバーがなくても、「ホットプレート」がモジュール内の唯一のディレクトリであることを確認します)。しかし、基盤はそこにあります。「コア」に関しては、ストーリーの「認証」側が実際に欠落しているだけです(dbにとらわれず、パスポートとインターフェイスするようにしたいので、多くのことを考える必要があります)。Dojoウィジェットは大きなボーナスですが、このフレームワークは何でも使用できます(実際、バックボーン固有のコードはスウィートです)。

ホットプレートが行わないこと

ホットプレートが実行しないのは、ユーザーがモジュールをアップロードしてアプリケーションにロードできるようにすることです。これは非常に注意が必要です。クライアント側はそれほど悪くはありません(ユーザーはアップロードするJavascriptを定義でき、それを行うモジュールが存在する可能性があります。心配はいりません)。ただし、サーバー側はせいぜいトリッキーです。うまくいかないことが多すぎます(クライアントがブロックしているコードをアップロードしたり、ファイルシステムの読み取りを開始したり、データベース全体にアクセスしたりする可能性があります)。これらの問題の解決は可能です、しかしそれらのどれも簡単ではありません(たとえば、ユーザーのノード環境をケージに入れて、別のポートで実行することができます)が、いくつかの問題は残ります。しかし、常に希望があります。

于 2012-09-08T00:20:26.080 に答える