on('request')每次请求都调用两次,为什么?

时间:2018-05-26 06:54:57

标签: javascript node.js ecmascript-6 es6-promise

我有简单的节点js代码,如果成功解析了promise,则在UI上返回JSON字符串,否则在UI上显示错误。

const server = require('http').createServer();

server.on('request', (request, response) => {

    new Promise(function(resolve, reject) {

        var jsonInput = '{"result":true, "count":42}';

        resolve(JSON.parse(jsonInput));

    }).then((data) => {

      response.end(JSON.stringify(data));

    }).catch((err) => {

      response.end(String(err));

    });

    console.log('received a request');

});

server.listen(8000);

为什么'received a request'被打印两次?浏览器是自动发送第二个请求还是我的代码有问题?

1 个答案:

答案 0 :(得分:3)

  

为什么'收到请求'打印两次?

最有可能的,因为您的浏览器发送了两个请求。 Chrome会在您第一次连接时执行此操作,例如,首先发送您实际请求的URL请求,以及favicon.ico请求。查看request.url以了解请求的用途。

例如,如果我将您的代码放入文件中,并将console.log行更改为:

console.log('received a request: ' + request.url);

当我连接到http://localhost:8000/时,我看到:

received a request: /
received a request: /favicon.ico