我正在尝试使用 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
为什么会被调用两次?这正常吗?
您收到两个请求,并且很可能是 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');
});
是的。当有人连接到服务器时,它会在服务器上发送消息。
这不正常。如果您只是刷新浏览器页面(Ctrl + R),则只能看到“hello world”一次。在 Chrome 中打开 开发者工具(菜单按钮 -> 工具 -> 开发者工具)并切换到 网络 选项卡。然后再次刷新浏览器页面并检查浏览器发送的请求。
来自文档:
response.end([数据],[编码])
此方法向服务器发出信号,表明所有响应标头和正文已发送;该服务器应该认为该消息是完整的。每个响应都必须调用response.end() 方法。
如果指定了data,相当于调用response.write(data,encoding),然后调用response.end()。
最后一行似乎是关键。您将看到第一个控制台日志,然后看到相当于response.write 的内容。抱歉,没有格式化,我在 iPad 上。