2013-08-05 19 views
1

REST調用我是新來的Node.js,我試圖讓一個HTTP請求。我跟着一個試圖調用random.org的教程。這是我的app.js文件:node.js中不能使以http

var http = require('http'); 

//The url we want is: 'www.random.org/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new' 
var options = { 
    host: 'www.random.org', 
    path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new' 
}; 

callback = function(response) { 
    var str = ''; 

    //another chunk of data has been recieved, so append it to `str` 
    response.on('data', function (chunk) { 
    str += chunk; 
    }); 

    //the whole response has been recieved, so we just print it out here 
    response.on('end', function() { 
    console.log(str); 
    }); 

    response.on('error', function() { 
    console.log("err"); 
    }); 
} 

http.request(options, callback).end(); 

所以,無論如何,運行使用

node app.js 

我收到以下錯誤控制檯此文件時:

C:\Program Files\nodejs>node app.js 

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: connect ETIMEDOUT 
    at errnoException (net.js:901:11) 
    at Object.afterConnect [as oncomplete] (net.js:892:19) 

2個問題:
1.爲什麼我收到超時錯誤(該網站的工作 - 我選中)
2.無論如何 - 爲什麼我沒有趕上這個錯誤althought我公頃在響應中有錯誤偵聽器。

任何可能的幫助將非常感激!

感謝

+1

該代碼至少在節點0.8中工作。爲了捕獲請求上的錯誤'http.request()。on('error'...)'可能會工作。 –

+0

謝謝@AndreasHultgren!你解決了我的一個問題 - 關於錯誤捕捉。關於版本 - 我使用0.10.13。這很重要嗎? – Assaf

+0

請求發送後請勿認爲它很重要。嘗試使用@ user568109的建議 –

回答

0

確定。我試圖將此作爲獨立節點js進程運行,而不使用瀏覽器作爲背景。 這是不推薦的,在上面指定的情況下,問題是這個無標頭請求缺少cookie。

如果我想包在createServer方法的一切,並根據要求,我會做用同樣的參數+從服務器請求餅乾http.request - 這會工作。

4

要連接的錯誤監聽到的響應,但請求本身發生錯誤。做些事情是這樣的:

http.request(options, callback) 
.on('error', function() { 
    console.log("err in request"); 
}) 
.end(); 

錯誤意味着該網站是可用的,如果沒有錯誤將顯示EHOSTUNREACHETIMEDOUT表示請求沒有足夠快地響應。它需要一些調查,lke是網絡下來,嘗試獲得www.google.com。它正在考慮的超時值是什麼?等

+0

即使谷歌返回ETIMEDOUT。我可以捲曲谷歌和random.org。 :( – Assaf

+0

是否需要一些時間捲曲顯示結果在你的選擇加上'超時:10000',(它是毫秒),並嘗試請求 – user568109

+0

號通過捲曲答案是立即...。 – Assaf