node.js http.request事件流-我的END事件去了哪里?
|
我正在制定一个狡猾的计划,其中涉及将node.js用作另一个服务之前的代理服务器。
简而言之:
将传入请求分派到静态文件(如果存在)
否则,将请求分派到另一个服务
我已经掌握了基础知识,但是现在尝试使用Sencha Connect来使整个工作正常进行,以便我可以访问所提供的所有kick-ass中间件。
所有的动作都在下面的dispatchProxy中发生
connect(
connect.logger(),
connect.static(__dirname + \'/public\'),
(request, response) ->
dispatchProxy(request, response)
).listen(8000)
dispatchProxy = (request, response) ->
options = {host: host, port: port, method: request.method, headers: request.headers, path: request.url}
proxyRequest = http.request(options, (proxyResponse) ->
proxyResponse.on(\'data\', (chunk) ->
response.write(chunk, \'binary\')
)
proxyResponse.on(\'end\', (chunk) ->
response.end()
)
response.writeHead proxyResponse.statusCode, proxyResponse.headers
)
request.on(\'data\', (chunk) ->
proxyRequest.write(chunk, \'binary\')
)
# this is never triggered for GETs
request.on(\'end\', ->
proxyRequest.end()
)
# so I have to have this here
proxyRequest.end()
您会在上面的最后一行中注意到proxyRequest.end()。
我发现,在处理GET请求时,永远不会触发请求的END事件,因此需要调用proxyRequest.end()。 POST请求会按预期触发DATA和END事件。
有几个问题:
这对proxyRequest.end()的调用安全吗?也就是说,即使在事件循环之外调用proxyResponse,它是否仍将完成?
GET不触发END事件是否正常,还是在连接堆栈中的某个位置捕获了END?
没有找到相关结果
已邀请:
2 个回复
舜辉
事件少,而
事件多。如果客户端发出GET请求,则会有标头,并且没有数据。这与POST不同,在POST中,请求者正在发送数据,因此
处理程序被命中。因此(请原谅我的JS示例,我对coffeescript不太熟悉):
如果我对该服务器进行curl调用,则不会触发数据事件,因为
请求不过是标题。因此,您的逻辑变为:
所以是的,由于我刚才提到的逻辑分支,您将不得不为
请求手动调用
。
烷刨画颠离