何时在节点中调用res.on(end)

When is res.on(end) called in node

本文关键字:on end res 调用 节点 何时      更新时间:2023-09-26

我有以下相当简单的代码(在coffeescript中):

http = require 'http'
options =
  hostname: 'somewebsite.com'
  port: 80,
  path: '/'
server = http.createServer  (request, response) ->
  response.writeHead 200, 'text/html'
  req = http.get options, (res) ->
    res.on 'data', (data) -> 
      console.log 'GETTING IT'
      response.write data
    res.on 'end', () ->
      console.log 'GOT IT'
      response.end()
server.listen 80

我的印象是,一旦请求完成,就会调用res.on'end',但每当我执行代码时,就会多次调用回调。有什么帮助吗?

所以,我在这里遇到的问题不是res.on('end')被多次调用,而是我发出了多个请求,因为对服务器的每个请求都是通过这个循环处理的。因此,当它试图加载favicon时,它将再次经历整个过程,当它尝试加载任何css文件或我"代理"的文件的html中包含的任何其他文件时,它会再次经历该部分的过程。

看看这个例子,我认为它将有助于澄清代码中发生的事情。点击以下两个网址localhost:8888和localhost:99999

http = require 'http'
somePortNum = 9999
options =
    hostname: 'localhost'
    port: somePortNum,
    path: '/'
proxyServer = http.createServer  (request, response) ->
  response.writeHead 200, 'text/html'
  response.write 'This server is a proxy server, we will make a request to the server on localhost:9999 and post the response below:'n'
  req = http.get options, (res) ->
    res.on 'data', (data) ->
      response.write data
    res.on 'end', () ->
      response.end()
proxyServer.listen 8888
server2 = http.createServer  (request, response) ->
  response.writeHead 200, 'text/html'
  response.write 'This is a very simple server, it just says hello world'
  response.end()
server2.listen somePortNum