3

我之前对节点做了一些实验

以下代码向控制台输出“aaa”,浏览器按预期继续等待响应。

var http = require("http");

http.createServer(function (req, res) {
  //res.writeHead(200);
  console.log("aaa");
  //res.end("hello");
  //console.log("test111");
  //res.end("bye");
}).listen(5555);

输出:

aaa

但是,一旦我取消注释第一个 res.end,节点就会根据一个请求将“aaa”两次写入控制台!

var http = require("http");

http.createServer(function (req, res) {
  res.writeHead(200);
  console.log("aaa");
  res.end("hello");
  //console.log("test111");
  //res.end("bye");
}).listen(5555);

输出:

aaa
aaa

最后,当我取消评论所有内容时,

var http = require("http");

http.createServer(function (req, res) {
  res.writeHead(200);
  console.log("aaa");
  res.end("hello");
  console.log("test111");
  res.end("bye");
}).listen(5555);

输出:

aaa
test111
aaa
test111

知道为什么每个单个请求都会执行两次 console.log 语句吗?

4

2 回答 2

8

在第一个示例中,浏览器没有得到回复并停在那里。

在第二个示例中,浏览器确实收到了回复,然后继续请求作为第二个请求的 favicon。

尝试同时记录请求 url:

var http = require("http");
http.createServer(function (req, res) {
  console.log("aaa", req.url);
  res.end("bye");
}).listen(5555);

你会看到服务器运行:

aaa /
aaa /favicon.ico
于 2012-07-06T19:59:54.197 回答
5

这有您正在寻找的答案:

对于每个请求,NodeJS 服务器将变量递增 2

它正在点击 / 和 /favicon.ico。

于 2012-07-06T20:00:36.247 回答