【问题标题】:NodeJS server executes two times?NodeJS 服务器执行两次?
【发布时间】:2018-03-05 12:12:59
【问题描述】:

我尝试使用以下代码开发一个基本的 HTTP 服务器:

var http = require("http");

http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
}).listen(8888);

并且工作正常并且页面返回: 你好世界

之后我试图理解 NodeJS 服务器中的无限循环并发现: 使用此代码时:

var http = require("http");
var n = 1;

http.createServer(function(request, response) {
    n++;
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    console.log('call: %d', n);
    response.end();
}).listen(8888);

并且工作正常页面返回: 你好世界

但是看到日志我发现了一个奇怪的结果,当页面刷新时。 呼叫:2 通话:3 基本上每次调用(页面刷新)服务器都会执行两次,为什么?这是每次调用时运行的线程数?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    试试这样:

    var http = require("http");
    var n = 1;
    
    http.createServer(function(request, response) {
        if(request.url != '/favicon.ico')
        {
           n++;
           response.writeHead(200, {"Content-Type": "text/plain"});
           response.write("Hello World");
           console.log('call: %d', n);
           response.end();
        }
    }).listen(8888);
    

    【讨论】:

      【解决方案2】:

      尝试添加console.log(request.url);。我打赌浏览器也在检查favicon.ico

      【讨论】:

      • 但是为什么在每次刷新页面时控制台都添加了两行?正确的不是每次刷新一次吗?我在不同的浏览器中尝试,答案是一样的
      • 嗯,添加console.log(request.url);会输出什么?
      • 当添加这个console.log(request.url);是:调用:2 / 调用:3 /favicon.ico
      • 是的,所以没有什么奇怪的事情发生。如果需要,您可以只检查网站图标请求的 url 并返回 404,或者在这种情况下使用实际的网站图标进行响应。
      【解决方案3】:

      不,不要执行 2 次。仅执行 1 次。如果你执行 console.log(request.url);你知道的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-15
        • 1970-01-01
        • 2017-09-20
        相关资源
        最近更新 更多