3

必要に応じて必要な複数のモジュールに分割されたサービスを構築しています。すべてのモジュールでルーターから「リクエスト」変数にアクセスする必要があります。

私の現在の解決策(一般的に変数を渡すために他のスレッドで提案されています)は、それを必要な各モジュールに渡すことです:

var a_module = require('./a_module')(req);

そして、各モジュールを関数としてエクスポートします:

module.exports = function(req) { ... }

しかし、それは冗長で、モジュールを関数としてエクスポートする必要があり、エクスポートされた関数のスコープ内でのみこの変数にアクセスできます。理想的には、必要なモジュール全体で変数にアクセスできるようにしたいと考えています。

私が見逃している他のエレガントな方法はありますか? req 変数をアプリケーション全体でグローバルとして宣言するようなものですか?

4

1 に答える 1

3

この質問は回答ではなく意見を求めるものなので、スタック オーバーフローにはあまり適していませんが、私の $0.02 は次のとおりです。

一歩下がって、リクエスト オブジェクトへのアクセスが必要なモジュールを本当にたくさん書いたかどうかを自問する必要があります。私はあなたが持っているとは思わない。作成する必要があるのは、必要な特定のデータを取る関数です。それ以上でもそれ以下でもありません。これらすべての関数は、ほぼ確実にリクエスト全体を必要としません。たとえば、実際にすべての HTTP ヘッダーにアクセスする必要があるのはどれくらいですか? プログラムは、ドメイン オブジェクト/データに対する一連の操作と考えてください。たとえば、ユーザー アカウント レコードを取得して、通常のユーザーから管理者に昇格させる機能があるとします。その機能に必要なのは、ユーザー アカウントだけです。HTTP 要求オブジェクトに結合しないでください。

少数の正確なパラメーターを取り、それらで何か役に立つことを行う、きれいに分離された一連の関数を作成するだけです。これを「疎結合」と呼びます。次に、関連する関数のグループをモジュールに編成します。これを「結束」といいます。次に、いくつかの「グルー」コードを使用して、HTTPreqオブジェクトから必要なパラメーターを抽出し、これらの関数に引数として渡します。これらの同じ関数は、コマンド ライン インターフェースまたは別の非 HTTP インターフェースで機能するはずです。req現在の HTTPオブジェクトについて知っているすべてのモジュールのすべての行に夢中になるのではなく、そのようにコーディングすると、理解しやすく、テストしやすく、寿命が長くなります。

于 2013-05-28T02:28:36.680 に答える