在nodejs docs http://nodejs.org/api/http.html#http_event_connect_1中,示例代码在设置侦听器之前调用request.end()(即req.on(...)方法)。示例代码snipet如下所示。
var req = http.request(options);
req.end();
req.on('connect', function(res, socket, head) {
console.log('got connected!');
// make a request over an HTTP tunnel
socket.write('GET / HTTP/1.1\r\n' +
'Host: www.google.com:80\r\n' +
'Connection: close\r\n' +
'\r\n');
socket.on('data', function(chunk) {
console.log(chunk.toString());
});
socket.on('end', function() {
proxy.close();
});
});
如果这种情况没有在请求设置之前立即结束请求,并且根本不会调用侦听器。
答案 0 :(得分:5)
req.end()
调用表示您已完成将请求正文发送到服务器(在这种情况下没有请求正文),而不是完整的请求/响应周期已完成。此外,http.request
将推迟连接到服务器的开始,直到下一次通过运行循环,以便您有机会设置监听器。
所以,从本质上讲,它正在做这样的事情:
下次运行循环传递