【问题标题】:on('request') called twice on every request, why?on('request') 对每个请求调用两次,为什么?
【发布时间】:2018-05-26 06:54:56
【问题描述】:

我有简单的节点 js 代码,如果成功解决了承诺,则在 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' 会打印两次?浏览器会自动发送第二个请求还是我的代码有问题?

【问题讨论】:

  • 您似乎正在尝试用 Node.js 编写 Web 后端。你完全可以只用上面的内置东西来做到这一点,但是FWIW,在某些时候你可能想看看koaExpress。他们为你做了很多无聊的工作(并且有插件来做各种各样的事情)。编码愉快!
  • 其实你说的没错,我用的是 Meteor js。但我正在努力学习并深入了解原始 Node JS。

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


【解决方案1】:

为什么“received a request”会打印两次?

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

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

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

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

收到请求:/ 收到请求:/favicon.ico

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2013-12-10
    • 2019-01-05
    相关资源
    最近更新 更多