2013-03-04 73 views
2

我不知道为什么这样simple http request是不工作...的Node.js简单的HTTP请求不起作用

http = require("http") 

url = "http://nodejs.org/" 

console.log "Try a request to #{url}..." 
reqHttp = http.request url, (response) -> 

    console.log "Request to #{url}" 
    response.on 'data', (chunk) -> console.log "chunk: ", chunk 

reqHttp.on 'error', (error) -> console.log "reqHttp error", error 

一分钟左右后返回:

reqHttp error { [Error: socket hang up] code: 'ECONNRESET' } 

,以确保它是不是我的环境出了问题,我尝试了request模块和工作得很好:

request = require("request") 

url = "http://nodejs.org/" 

request url, (error, response, body) -> 
    console.log body if not error and response.statusCode is 200 

似乎I'm not the only one

所以,我有一个解决方案,我的问题(使用request模块),但我想知道为什么我不能使用buind在HTTP请求。它是越野车还是不可靠? (Node.js版本0.8.21)

+0

你能格式化你的代码吗,很难说没有任何括号 – user568109 2013-03-04 15:09:36

+0

对不起。我忘了提及它是咖啡标记。您可以使用http://coffeescript.org/#try:查看js抄录。但基本上,功能范围是由相关空间决定的。 – 2013-03-04 15:11:49

回答

7

好的,这很简单。您正在构建一个http request,但未完成发送。从链接你给自己:

req.write('data\n'); //Write some data into request 
req.write('data\n'); 
req.end();    //Finish sending request let request go. Please do this 

既然你从未使用过req.end(),它就挂了,因为它从来没有得到完成。节点重置非活动请求

reqHttp error { [Error: socket hang up] code: 'ECONNRESET' } 
+0

谢谢!只需将'req.end()'放在代码的末尾,它就可以工作。 我认为可以质疑API设计和所有...无论哪种方式,它的工作。谢谢! – 2013-03-04 16:33:21