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

问题描述 投票:0回答:4

我正在尝试使用 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 node.js-connect
4个回答
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');
});

0
投票

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


0
投票

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


-1
投票

来自文档:

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

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

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

最后一行似乎是关键。您将看到第一个控制台日志,然后看到相当于response.write 的内容。抱歉,没有格式化,我在 iPad 上。

© www.soinside.com 2019 - 2024. All rights reserved.