在设置侦听器之前调用nodejs request.end()方法

时间:2014-09-19 19:34:16

标签: node.js

在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();
    });
  });

如果这种情况没有在请求设置之前立即结束请求,并且根本不会调用侦听器。

1 个答案:

答案 0 :(得分:5)

req.end()调用表示您已完成将请求正文发送到服务器(在这种情况下没有请求正文),而不是完整的请求/响应周期已完成。此外,http.request将推迟连接到服务器的开始,直到下一次通过运行循环,以便您有机会设置监听器。

所以,从本质上讲,它正在做这样的事情:

  1. 创建新请求
  2. 告诉请求我们已经完成了发送我们要发送的数据
  3. 告诉我们在连接服务器时告知我们的信息
  4. 下次运行循环传递

    1. 尝试连接服务器
    2. 成功连接后

      1. 发送请求等