request.on(“response”,)永远不会被解雇

我目前正忙于使用NodeJS并尝试使用Twitter-Search API。 curl它工作正常 – 所以我的防火墙或任何没有错。 然而,我从来没有在NodeJS中得到回应。

 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也正在工作 。

任何提示或解决scheme,欢迎!

提前致谢。

永远不会发送请求。

你需要使用request.end()

注意:请求不完整。 此方法只发送请求的标题。 需要调用request.end()来完成请求并检索响应。 (这听起来很复杂,但它提供了一个机会让用户通过request.write()将一个主体stream式传输到服务器。)

另外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你的search参数
  2. 你还需要设置Host头,否则Twitter将返回一个404

固定代码:

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