【问题标题】:Unwanted multiple requests while using Connect/NodeJS使用 Connect/NodeJS 时不需要的多个请求
【发布时间】:2014-01-25 22:28:38
【问题描述】:

我正在尝试使用 Connect 创建中间件,该中间件将 Hello World 显示到网页并将其记录在控制台中。我已经能够让它在我的浏览器中工作,但我注意到控制台记录了两次 - 使用 curl 时它不会这样做。我没有网站图标,Chrome 中的所有扩展都被禁用。

这是我的代码...相当简单:

var connect = require('connect');

var app = connect();
app.use(function (req, res, next) {
    console.log('hello world');
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World');
});
app.listen(5000);

同样,在 Chrome 中打开 http://localhost:5000 后,这是终端中的输出:

hello world

hello world

为什么会被调用两次?这正常吗?

【问题讨论】:

    标签: node.js http request connect


    【解决方案1】:

    您收到两个请求,很可能是 chrome 检查网站图标。添加console.log(req);并检查向服务器发出的请求。

    app.use(function (req, res, next) {
        console.log(req);
        console.log('hello world');
        res.setHeader('Content-Type', 'text/plain');
        res.end('Hello World');
    });
    

    【讨论】:

    • console.log(req.url) 不那么冗长,应该更容易准确地看到浏览器在第二个请求中请求的内容。
    【解决方案2】:

    是的。当有人连接服务器时,它会在服务器上发送消息。

    【讨论】:

    • 这并不能解释为什么它被调用了两次。我了解当有人连接到服务器时会发送请求。
    【解决方案3】:

    这不正常。如果您只是刷新浏览器页面(Ctrl + R),您必须只看到一次“hello world”。在 Chrome 中打开 Developer Tools(菜单按钮 -> Tools -> Developer Tools)并切换到 Network 选项卡。然后再次刷新浏览器页面,查看浏览器发送的请求。

    【讨论】:

      【解决方案4】:

      来自文档:

      response.end([数据], [编码])

      此方法向服务器发出所有响应标头和正文已发送的信号;该服务器应认为此消息已完成。必须在每个响应上调用方法 response.end()。

      如果指定了data,相当于调用response.write(data, encoding)后跟response.end()。

      最后一行似乎是关键。您将看到您的第一个控制台日志,然后相当于 response.write。抱歉,我使用的是 iPad。

      【讨论】:

        猜你喜欢
        • 2021-07-30
        • 1970-01-01
        • 2019-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多