相对较新的Node.JS并且有一个简单的服务器使用http.createServer监听端口8081.它从一个简单的网页监听Ajax调用。没有问题让节点按预期侦听和响应请求。我遇到的一个问题是,当我通过另一个浏览器实例同时向同一节点引入第二个请求时,或者在另一台机器上,第二个请求根据第一个调用参数生成结果。
调试服务器时,我可以看到两个请求都按预期使用不同的参数,但就好像第二个请求会覆盖第一个请求。来自.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);
}
}
答案 0 :(得分:0)
需要循环...... ARGH !!
正如@PatrickHund所说:第二次要求请求模块是您正在寻找的明显问题。
始终在脚本开头需要您的模块!如果这仍然不起作用,我也想知道什么是Default()(l.6)
答案 1 :(得分:0)
这里只是更新。是的,循环中的require是一个问题。但是,造成呼叫干扰的问题在于“默认值”&#39;声明:
var CallSettings = Defaults();
应该是var CallSettings = new Defaults();
通过添加它,每次调用都拥有它自己独特的权威对象。