我有一个用 node.js api 写的服务端和客户端,当我尝试从客户端发起一次 HEAD 请求的时候,会得到一个错误,
{ [Error: socket hang up] code: 'ECONNRESET' }
同时发起一个 PUT 请求就不会有这样的问题,参数都一样,我把相关的代码和资料都放到了这个gist 欢迎评论!谢谢
P.S 虽然是一个 node 问题,但我发现 ruby-china 还是比隔壁某 node 社区要活跃很多啊。
首先是res.end得改成res.end() .... 我总觉得这个是 ruby 写久了到 coffee 里面爱掉的坑.. 然后是req.write '0\r\n\r\n'得放 response 事件回调里面才能行吧
res.end
res.end()
req.write '0\r\n\r\n'
#1 楼 @krazy
谢谢
res.end 或者 res.end() 这个确实没注意,不过似乎并不影响结果,修复了还是有这个问题。
req.write '0\r\n\r\n' 是放在那里,不然的话怎么发起请求呢?
问题是同样的参数的 PUT 请求就没有这样的情况,仅仅是请求的 METHOD 不一样就出现这个问题很奇怪。
#2 楼 @simsicon 噢 这样 我错了.. 不发出请求倒是可以,囧。。 这个帖子似乎提供了解决方案..用 domain 模块包住然后 handle error... 不知道有没有帮助 .. http://clock.co.uk/tech-blogs/preventing-http-raise-hangup-error-on-destroyed-socket-write-from-crashing-your-nodejs-server
#3 楼 @krazy 谢谢,的确是一个思路,我来试试。
HEAD 请求 body 应该为空,把 res.write '\n' 去掉。
res.write '\n'
#5 楼 @doitian 的确是这样。谢谢你!