使用Connect / NodeJS时发出不需要的多个请求

时间:2014-01-25 22:28:38

标签: node.js http request connect

我正在尝试使用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

为什么被叫两次?这是正常的吗?

4 个答案:

答案 0 :(得分:1)

您收到了两个请求,很可能是针对favicon的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');
});

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这不正常。如果您只是刷新浏览器页面(Ctrl + R),则必须只看一次“hello world”。在Chrome中打开开发者工具(菜单按钮 - > 工具 - > 开发人员工具)并切换到网络标签。然后再次刷新浏览器页面并检查浏览器发送的请求。

答案 3 :(得分:-1)

来自文档:

response.end([data],[encoding])

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

如果指定数据,则相当于调用response.write(data,encoding),然后调用response.end()。

最后一行似乎是关键。您已经看到了第一个控制台日志,那么它与response.write相当。抱歉我的iPad上没有格式化。