Node.js:从另一个模块读取变量返回错误的值

Node.js:从另一个模块读取变量返回错误的值,node.js,Node.js,我是Node.js的新手。我刚刚编写了一个http服务器模块,其中包含一个count变量,用于存储模块接收http请求的次数: var http=require(“http”); var计数=0//到目前为止没有收到任何请求 函数start(){ 函数onRequest(请求、响应){ 日志(计数+”:在主服务器中收到的请求); 计数++; writeHead(200,{“内容类型”:“text/plain”}); 回答。写下(“你好!你是请求号”+计数); response.end(); }

我是Node.js的新手。我刚刚编写了一个http服务器模块,其中包含一个count变量,用于存储模块接收http请求的次数:

var http=require(“http”);
var计数=0//到目前为止没有收到任何请求
函数start(){
函数onRequest(请求、响应){
日志(计数+”:在主服务器中收到的请求);
计数++;
writeHead(200,{“内容类型”:“text/plain”});
回答。写下(“你好!你是请求号”+计数);
response.end();
}
http.createServer(onRequest).listen(8888);
log(“主服务器已启动”);
}
函数getCount(){
返回计数;
}  
exports.getCount=getCount;
exports.start=开始;
然后我编写了另一个服务器,我们称之为test.js,它启动服务器模块,但同时侦听另一个端口上的http请求,比如说8889。test.js应该显示server.js到目前为止所服务的请求数

var http=require(“http”);
var server=需要(“./server”);
server.start();
函数onRequest(请求、响应){
log(“在测试服务器中接收到请求”);
writeHead(200,{“内容类型”:“text/plain”});
write(“您好!服务器应用程序已提供:”+Server.getCount());
response.end();
}
createServer(onRequest).listen(8889);
log(“测试服务器已启动”);
当我运行test.js并向server.js发出请求时(
http://localhost:8888
),它加起来就是计数。(我每次都会收到两个请求,正如我在某个地方读到的,这是因为浏览器发送了另一个获取favicon.ico的请求,好吧,好吧,这不是我的问题)。我的问题是,当我向test.js发送请求时(
http://localhost:8889
),我总是收到我已经向server.js发出的请求数,外加一个额外的请求数!换句话说,如果
http://localhost:8888
向我显示1,
http://localhost:8889
从我的服务器模块读取相同的值,显示2

有人知道为什么会这样吗?
提前谢谢

当您在浏览器中点击“刷新”时,请求通常按以下顺序进行(我相信总是这样,在Chrome中我知道总是这样,在其他浏览器中则不太确定):

yourdomain.com/

yourdomain.com/favicon.ico
因此,您将在第一个请求之后显示计数。然后请求您的favicon,这将增加您的计数值。如果您从浏览器发出请求,您将永远不会在两个窗口中看到相同的值,因为在您能够请求8889端口之前,您的favicon请求将始终进入。我想,这在理论上是可能的。如果您可以在X毫秒内点击两个窗口上的刷新,您可以在favicon请求之前ping 8889,但是如果您在本地计算机上工作,那么这个毫秒数将非常小,以至于不可能

如果您想验证这一点,可以执行如下简单检查:

if(request.url.match(/favicon.ico/i) === false) count++;

这可以防止您的favicon请求更新计数。

当您在浏览器中点击“刷新”时,请求通常按以下顺序进行(我始终相信,在Chrome中,我知道它始终如此,在其他浏览器中则不太确定):

yourdomain.com/

yourdomain.com/favicon.ico
因此,您将在第一个请求之后显示计数。然后请求您的favicon,这将增加您的计数值。如果您从浏览器发出请求,您将永远不会在两个窗口中看到相同的值,因为在您能够请求8889端口之前,您的favicon请求将始终进入。我想,这在理论上是可能的。如果您可以在X毫秒内点击两个窗口上的刷新,您可以在favicon请求之前ping 8889,但是如果您在本地计算机上工作,那么这个毫秒数将非常小,以至于不可能

如果您想验证这一点,可以执行如下简单检查:

if(request.url.match(/favicon.ico/i) === false) count++;
这将阻止您更新favicon请求的计数