我正在尝试使用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
为什么被叫两次?这是正常的吗?
答案 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上没有格式化。