Node.js HTTP サーバーを実行していますが、これは次のようになります (簡略化):
http = require('http');
help = require('./modules/help').run;
router = require('./modules/router').run;
m = {something: require('./modules/something')};
var server = http.createServer(router).listen(8001);
"help" は関数ヘルパーのセットです。例:
module.exports.run = {
joinObjects: function(obj1, obj2) {
for (var prop in obj2) {
obj1[prop] = obj2[prop];
}
return obj1;
}
}
「ルーター」はリクエストを処理します (それをさらに下に渡し、クライアントへの応答を処理します)。
module.exports.run = function(req, res) {
var urlPath = url.parse(req.url).pathname;
switch(urlPath) {
case '/something':
requestHandler(req, res, 'something');
break;
...
}
function requestHandler(req, res, handler) {
var data = '';
req.on('data', function(chunk) {
data += chunk;
}
req.on('end', function() {
m[handler].run(req, data, function(response) {
response.headers = help.joinObjects(config.responseHeaders, response.headers);
res.writeHead(response.code, response.headers);
res.end(response.data);
});
}
}
}
「ハンドラー」モジュール/関数はコールバック関数を実行し、応答 (コード、ヘッダー、およびデータ) をそれに渡します。次に、コールバック関数は、構成ファイルに設定されている一連のデフォルト ヘッダーとヘッダーをマージします。
問題:help.joinObjects()
同時に呼び出している 2 つの接続がある場合(それは私の推測です)、response.headers
プロパティが別のユーザー/接続のものと衝突し、不正なデータを返します。マージを行う行をコメントアウトすると、これは発生しません。
質問:「ヘルプ」モジュールに対する私のアプローチの何が問題になっていますか? ここで理解できないスコープの問題があります。