2010-12-09 126 views
4

我目前正忙於NodeJS,嘗試使用Twitter-Search API。使用curl它可以正常工作 - 所以我的防火牆或其他方面沒有任何問題。然而,我從來沒有在NodeJS中得到迴應。request.on(「response」,[...])永遠不會被觸發

var sys = require("sys"), 
    http = require("http"), 
    events = require("events"); 

sys.puts("Hi there… "); 
var client = http.createClient(80, "search.twitter.com"), 
    body = "", 
    query = "foobar"; 

function getResults() { 
    sys.puts("fetching for "+query); 
    var request = client.request("GET", "/search.json?q="+query); 
    request.on("response", function(data){ 
    /* this somehow never gets fired :(*/ 
    sys.puts("BODY:"+ data); 
    }); 
} 

var interval = setInterval(getResults, 5000); 

URL is also working

歡迎任何提示或解決方案!

在此先感謝。

回答

8

從不發送請求。

您需要使用request.end()

注:請求是不完整的。此方法僅發送請求的標題。需要調用request.end()來完成請求並檢索響應。 (這聽起來令人費解,但它爲用戶提供了一個機會來流中的主體到服務器request.write()。)

另外,response活動的參數是response object身體。您需要在response object上設置data事件,然後監聽end事件以確保獲得所有數據。

request.on('response', function (response) { 
    var body = ''; 
    response.on('data', function (chunk) { 
    body += chunk; 
    }); 
    response.on('end', function() { 
    console.log('BODY: ' + body); 
    }); 
}); 
request.end(); // start the request 

參見:http://nodejs.org/api/http.html#http_class_http_clientrequest

再提一些建議

  1. 您可能需要使用querystring.escape來urlencode搜索參數
  2. 您還需要設置Host頭,否則, Twitter將返回404

固定碼:

var querystring = require('querystring'); 
... 
var request = client.request("GET", "/search.json?q=" + querystring.escape(query), {'Host': 'search.twitter.com'}); 
+0

你,先生,是我的個人英雄的一天。謝謝! :) – 2010-12-09 13:32:54

相關問題