Node.JS相對較新,並且使用監聽端口8081上的http.createServer的簡單服務器。它監聽來自簡單網頁的Ajax調用。沒有問題讓節點按預期收聽和響應請求。但我遇到的一個問題是,當我通過另一個瀏覽器實例或另一臺機器同時向同一節點引入第二個請求時,第二個請求會根據第一個調用參數生成結果。對NodeJS服務器的兩次調用互相干涉
在調試服務器時,我可以看到兩個請求都按照預期使用不同的參數進入,但它好像第二個請求覆蓋了第一個請求。來自.NET背景,我最初認爲我有全局變量在調用之間共享 - 但我已經消除了所有全局變量。
是否存在一些令人痛苦的事情,讓我在保持兩個單獨的節點調用完全獨特時缺少一些東西?
下面是我使用的代碼,...(貼下旬)
var http = require("http"),
url = require('url');
http.createServer(function(request, response) {
var Params = url.parse(request.url, true).query;
var CallSettings = Defaults();
CallSettings.Location = Params.Location;
CallSettings.Threshold = Params.Threshold;
CaptureDataFromHost(request, response, CallSettings);
}).listen(8081);
function CaptureDataFromHost(request, response, CallSettings) {
try {
for (var Page = 0; Page < Pages; Page++) {
var http = require("http"),
url = require('url');
var RequestString = '';
var request = require('request');
request(RequestString, function(error, response2, body) {
if (!error && response2.statusCode == 200) {
var ResponseAsObject = JSON.parse(body);
CallSettings.ResponseCount++;
for (var i = 0; i < ResponseAsObject.products.length; i++) {
// various local business logic here,...
}
// If it is the last page response, run aggregate data,...
if (CallSettings.ResponseCount == CallSettings.Pages) {
AggregateAllProductData(response, Location,
CallSettings);
}
}
})
}
}
catch (err) {
console.log(err);
}
}
延遲添加代碼! – Spades
無需在循環的每次迭代中都需要http和url,它們已經在外部作用域 –
中定義,您還需要請求模塊覆蓋CaptureDataFromHost的請求參數,這將不起作用 –