2012-07-31 418 views
1

我是一名初學者,使用node.js,而且我似乎無法使其工作。Node.js http請求

function sleep(milliSeconds){ 
    var startTime = new Date().getTime(); 
    while (new Date().getTime() < startTime + milliSeconds); 
} 

var isRequestComplete = false; 
while(isRequestComplete == false){ 
console.log("in make request"); 
var querystring = require('querystring'); 


var data = querystring.stringify({ 
     username: 'username', 
     password: 'password', 
     action: 'convert', 
     voice: 'engfemale1', 
     text: 'stuff and things, this should take longer than one request.' 
    }); 

var options = { 
    host: 'ws.ispeech.org', 
    port: 80, 
    path: '/api/rest/1.5', 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded', 
     'Content-Length': data.length 
    } 
}; 

var http = require('http'); 
var req = http.request(options, function(res) { 
    console.log("got response"); 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
     console.log("body: " + chunk); 
     if(chunk.indexOf("finished") != -1){ 
      isRequestComplete = true; 
     } 
    }); 
}); 


req.on('error', function(e) { 
    console.log('problem with request: ' + e.message); 
}); 
req.write(data); 
req.end(); 
console.log("completed"); 
sleep(5000); 
} 

無論出於何種原因,http請求都不會發迴響應。除非代碼完全完成,否則在while循環中我永遠不會得到迴應。因此循環永遠不會結束。我的程序中輸入用戶名和密碼,這裏不是爲了保密。謝謝閱讀。

+0

類似於http://stackoverflow.com/questions/10759638/using-a-json-file-to-store-a-small-database-persistently-in-javascript/10759692#10759692,這也涉及不適當的使用回調。 – apsillers 2012-07-31 15:33:45

回答

0

這不是讓你的代碼入睡的方法! while循環不是「休眠」,它的處理速度儘可能快。在你的情況下,它是在日期之後的日期之後獲取到達目的地的日期。

看看這裏看看這個*應該如何工作。 http://nodejs.org/api/http.html

+0

那麼我正在向ws.ispeech.org/api/rest/1.5發出請求。我想我真正的問題是如何等待,直到它發回響應?那麼我可以繼續循環,因爲它只是在收到響應之前保持循環併發送新的請求。此外,這應該是一個POST請求,對不起,如果我沒有說清楚。 – 2012-07-31 15:34:52

+0

這種工作方式是,你不必*等待任何事情!這就是回調的工作原理。您只需提出您的請求,並在發生某些事情時(例如錯誤或成功,您的代碼中已經存在意外情況),您將收到您的回覆並繼續。注意你是如何擁有一個函數(res.on('data')),等待數據從你的請求中返回。 – 2012-07-31 15:37:22

0

看看http://nodejs.org/上的第一個http服務器示例。

您必須創建一個HTTP服務器,用於偵聽來自到達指定IP地址:端口的瀏覽器的請求。一旦請求到達,服務器將指定的響應發送到瀏覽器。