ノードでは、モジュール内でグローバルに初期化された変数が、リクエスト間で混同されていることがわかります[1つのリクエストによって行われた変更が他のリクエストに影響を与えます]。例:
a.js
var a;
function printName(req, res) {
//get param `name` from url;
a = name;
res.end('Hi '+a);
}
module.exports.printName = printName;
index.js
//Assume all createServer stuffs are done and following function as a CB to createServer
function requestListener(req, res) {
var a = require('a');
a.printName(req, res);
}
私の仮定によると、モジュール「a」からエクスポートされたprintName関数は、新しいリクエストがノードにヒットするたびに実行され、毎回異なるスコープオブジェクトを持ちます。
したがって、モジュール内にグローバルなものを持っていても、リクエスト間でそれらに影響を与えることはありません。
しかし、そうではないことがわかります。ノードが特定の関数のモジュール エクスポートを処理する方法 [キャッシュされたモジュール エクスポート オブジェクトのスコープを処理する方法] と、モジュール内のリクエスト全体でこの共有グローバル変数を克服する方法を説明できる人はいますか?
編集 [リクエストごとに非同期タスクを実行します]: ライブ システムでの迅速なリクエストを使用します。これは基本的にredisにクエリを実行し、リクエストに応答します。間違った応答が間違った要求にマッピングされていることがわかります (redis ルックアップの [モジュール内のグローバル変数に格納された] 応答が、誤って diff req にマッピングされています)。また、リクエストパラメーターに基づいてオーバーライドできるグローバル変数としていくつかのデフォルト値があります。これも台無しになっています