Reputation: 424
I'm new to Node.js. I just wrote an http server module, with a count variable that stores number of times the module has received an http request:
var http = require("http");
var count = 0; //no of requests so far
function start() {
function onRequest(request, response) {
console.log(count + ": Request received in Main Server");
count++;
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello! you are request no. " + count);
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Main Server has started.");
}
function getCount() {
return count;
}
exports.getCount = getCount;
exports.start = start;
Then I wrote another server, let's call it test.js that starts the server module, but at the same time listens to http requests on another port, let's say 8889. The test.js is supposed to show number of requests that server.js has served so far.
var http = require("http");
var server = require("./server");
server.start();
function onRequest(request, response) {
console.log("Request received in Test Server");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello! Server app has served: " + server.getCount());
response.end();
}
http.createServer(onRequest).listen(8889);
console.log("Test Server has started.");
When I run test.js, and make requests to server.js (http://localhost:8888
), it adds up to the count. (I get double requests each time which as I read somewhere is due to the fact that the browser sends another request to get favicon.ico, ok, fine, that is not my problem). My problem is that when I send a request to test.js (http://localhost:8889
), I always get number of requests I have already made to server.js plus one extra! In ther words, if http://localhost:8888
shows me 1, http://localhost:8889
which reads the same value from my server module shows 2!
Anyone has a clue why it is like that? Thanks in advance!
Upvotes: 1
Views: 325
Reputation: 18900
When you hit refresh from a browser, requests are usually(I believe always, in Chrome I know it is always, not as sure in other browsers) made in this order:
yourdomain.com/
Followed by
yourdomain.com/favicon.ico
So, you are displaying the count after the first request. And THEN your favicon is requested, which is incrementing the value of your count. If you're making requests from a browser you will NEVER see the same value in both windows, because your favicon request will always come in, before you are able to request your 8889 port. I guess, it is theoretically possible. If you could hit refresh on both windows within X number of milliseconds, you could ping 8889 before the favicon request, but if you're working from a local machine, this number of milliseconds would be so small as to be impossible.
If you want to validate this you could do a simple check like this:
if(request.url.match(/favicon.ico/i) === false) count++;
Which should keep your count from updating for favicon requests.
Upvotes: 1