私はもともと、すべてのコードを 1 つのファイルにまとめ、コンストラクターと IIFE を使用して個別のチャンクに分割した nodejs で動作するアプリケーションを持っていました。賢明な分離と分離を提供するために、各チャンクが別のファイルに存在するようにプログラムをリファクタリングしようとしましたが、問題が発生しました。
プログラムは 3 つのコア チャンクに分割されます。
Redis に接続するために初期化し、redis クライアントと dataStore オブジェクトを返すデータストア コンストラクター。
function CreateDataStore(storePort, storeUrl, passwd) {
var client
, datastore;
//create the redis client
//create the datastore
//exports
return {
"redisClient": client,
"dataObject": createSiteUpdater("")
};
}
var dataStore = CreateDataStore("xxxx","xxxx","xxxx");
var client = dataStore.redisClient;
var testResults = dataStore.dataObject;
redis クライアントを使用し、データストア オブジェクトにデータを格納する Web クローラー コンストラクター。
function CreateWebCrawler(){
//do some stuff
//initialise robots.txt parser
return function() {
//crawl a page
//add page data to testResults object
}
}
同じデータストア オブジェクトを読み取り、データをフロントエンド クライアントに送信する Web サーバー コンストラクター。
function CreateWebServer() {
//do some stuff
//initialise an express webserver
//initialise socket.io
//send testResults object out over a socket.
}
これは、同じファイルにあるときはすべて正常に機能しましたが、3 つの個別のファイルにリファクタリングしたいので、それらが互いにどのように通信するのかについて混乱しています。
新しいアーキテクチャーの下では、Web クローラー・モジュールと Web サーバー・モジュールの両方が、dataStore オブジェクトをエクスポートするデータ・ストア・モジュールを「必要」とします。私が行う必要があるのは、Web クローラー モジュールによってその dataStore オブジェクトに加えられたすべての変更が、Web サーバー モジュールで使用可能な dataStore オブジェクトのバージョンに複製されることです。
私はすべてのnodejsドキュメントを調べてみましたが、多くのグーグルも行いましたが、commonjsモジュールのexportステートメントによって返されるオブジェクトが同じオブジェクトである場合、私の人生では解決できません依存関係グラフの上位にある 2 つの異なるモジュールに個別に返された場合のヒープ。これが本当かどうかを誰かに説明してもらえますか?理想的には、動作を適切に理解するための正しいドキュメントへのリンクを提供してもらえますか?