Подтвердить что ты не робот

Веб-сервер Nodejs вызывает запросListener дважды, когда страница загружается

Ниже приведен пример веб-сервера из документации с добавленным счетчиком. Он печатает счетчик на консоли, когда клиент/браузер запрашивает страницу.

Тем не менее, он вызывается дважды по запросу браузера. Почему?

Это то, что я ожидал бы:

browser : Hello World 1
console : Counter 1
[reload page]
browser : Hello World 2
console : Counter 2

но это происходит:

browser : Hello World 1
console : Counter 1
          Counter 2
[reload page]
browser : Hello World 3
console : Counter 3
          Counter 4

Я запускаю код с помощью командной строки

$ node example.js

Вот код:

  var 
    http = require('http'),
    counter = 0,
    sys = require('util');
  http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    counter++;
    res.end('Hello World ' + counter + '\n');
    sys.puts('Counter ' + counter);
  }).listen(8000, "");
4b9b3361

Ответ 1

В программировании при застревании всегда полезно проследить код, чтобы лучше понять, что происходит. Самый простой способ сделать это - добавить дополнительные отладочные/печатные операторы, пока не увидите, что происходит.

Измените строку sys.puts на:

sys.puts('Counter ' + counter + " from " + req.url);

Я думаю, вы обнаружите, что второй запрос - это браузер, запрашивающий значок для сайта.

Ответ 2

Мы можем игнорировать подсчет обновления страницы из-за favicon со следующим фрагментом кода:

if (request.url === '/favicon.ico') {
   response.writeHead(200, {'Content-Type': 'image/x-icon'} );
   response.end();
   console.log('favicon requested');
   return;
}

Ссылка: https://gist.github.com/763822